本节将详解讲解PHP中的cookie。

什么是cookie?

由于HTTP协议本身是无状态的,每次请求都是独立的,服务器无法识别连续的请求是否来自同一用户。这导致无法实现购物车、用户登录等需要保持状态的功能。为了解决这个问题,网景公司在1994年发明了Cookie技术,通过在客户端存储小量数据来实现会话跟踪。在现代Web开发中,通常结合使用Cookie和Session技术,其中Cookie存储Session ID,实际会话数据存储在服务器端,既保证了安全性又维持了状态。

cookie的本质是一段存储在客户机的中文本,在客户端发送请求时一起传输到服务器,通过cookie验证保持对话。

下面,我将向读者演示如何操作cookie:

1. 在PHP中,我们可以通过setcookie()函数来创建cookie:

setcookie()的语法格式如下:

/* setcookie的语法格式 */
bool setcookie(
    string $name,                    // Cookie名称(必需)
    string $value = "",             // Cookie值
    int $expires_or_options = 0,    // 过期时间或选项数组
    string $path = "",              // 服务器路径
    string $domain = "",            // 域名
    bool $secure = false,           // 仅HTTPS
    bool $httponly = false,         // 仅HTTP访问
    string $samesite = ""           // SameSite属性
)

下面,我们创建一个key="ck",value=“12345”,维持1小时会话,然后能够作用域全站的cookie,保存到test.php里。

<?php
// 创建cookie,有效期1小时
setcookie("ck", "12345", time() + 3600, "/");
// 参数说明:
// 1. cookie名称: "ck"
// 2. cookie值: "12345"
// 3. 过期时间: time() + 3600 (当前时间+3600秒)
// 4. 路径: "/" (全站可用)
?>

进入test.php,然后F12查看cookie,发现我们刚才创建的cookie:

cookie展示


2. 我们说过,cookie是用来维持会话的,那么怎么进行cookie验证呢?要知道,cookie以键值对的方式存储在$_COOKIE超全局数组中,我们只需要通过isset()函数判断$_COOKIE["ck"]是否存在就能完成判断。

准备一个justify.php文件:

<?php
// isset()验证cookie
if (isset($_COOKIE['ck'])) {
    echo "Cookie存在,值为: " . $_COOKIE['ck'];
} else {
    echo "Cookie不存在!";
}
?>

打开justify.php,我们会看到:

justify.php

在test.php里创建的cookie存在,说明cookie验证成功。有读者可能疑惑客户端明明没有发送数据啊,这里justify.php为什么会检查到cookie呢?

首先我们要知道,我们在test.php里设置了cookie,当我们访问test.php时,cookie就已经存储在我们的浏览器中了;当我们访问justify.php时,访问会携带cookie到justify.php,此时justify.php验证到cookie(key=='ck',value=='12345'),所以完成if语句,打印“Cookie存在,值为: 12345”。


3. 怎么删除cookie?

3.1 PHP脚本通过setcookie删除:

在test.php中,我们写入:

<?php
// 创建cookie,有效期1小时
setcookie("ck", "12345", time() + 3600, "/");
// 参数说明:
// 1. cookie名称: "ck"
// 2. cookie值: "12345"
// 3. 过期时间: time() + 3600 (当前时间+3600秒)
// 4. 路径: "/" (全站可用)
?>
<?php 
/* 删除cookie */
setcookie("ck","", 0,"/");
?>

通过给值赋空字符、有限时间改为0来实现cookie的删除。

3.2 客户端浏览器手动删除

手动删除cookie

通过justify.php进行验证:

image.png


总结:当下浏览器会话主要通过session+cookie的方式进行,Session将数据存储在服务器端,仅通过Cookie传递一个Session ID作为"钥匙",存储敏感数据如登录凭证等,两者协作共同解决HTTP协议无状态问题,Session提供安全性,Cookie提供识别机制。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)