PHP Cookie
Cookie 是网站为了识别用户身份、记录用户偏好或跟踪用户行为而存储在用户浏览器中的小型文本数据片段。作为 HTTP 协议的重要组成部分,Cookie 能够在用户访问同一网站时被读取,从而实现状态保持和个性化服务等功能。
PHP 主要通过setcookie()
函数和$_COOKIE
超全局数组来操作 Cookie。
Cookie 基础设置方法
1. 简单 Cookie
// 设置一个 1 小时后过期的 Cookie
setcookie("domain", "www.kaicz.com", time() + 3600);
✅ 参数说明:
- 第1参数:Cookie 名称(字符串)
- 第2参数:值(自动 URL 编码,空格转
+
) - 第3参数:过期时间(Unix 时间戳,如果省略浏览器关闭自动过期)
2. 使用 setrawcookie()(不自动编码)
// 值中包含特殊字符时使用
setrawcookie("domain", "www.kaicz.com", time() + 3600);
Cookie 完整参数设置(PHP 7.3+ 推荐写法)
setcookie('prefs', 'dark_mode', [
'expires' => time() + 86400, // 1天后过期
'path' => '/', // 全站有效
'domain' => '.kaicz.com', // 子域名共享
'secure' => true, // 仅 HTTPS 传输
'httponly' => true, // 禁止 JS 访问
'samesite' => 'Lax' // 防 CSRF
]);
✅ 参数详解:
参数 | 说明 |
---|---|
expires | 过期时间戳(0 = 会话Cookie,浏览器关闭后失效) |
path | Cookie 有效的服务器路径(/ 表示全站) |
domain | 生效域名(.kaicz.com 允许子域名共享) |
secure | true 时仅通过 HTTPS 传输 |
httponly | true 时 JavaScript 无法读取(防 XSS) |
samesite | Strict /Lax /None (控制跨站请求携带 Cookie,默认 Lax ) |
读取 Cookie
// 检查 Cookie 是否存在
if (isset($_COOKIE['username'])) {
echo "欢迎回来," . $_COOKIE['username'];
} else {
echo "您好,访客!";
}
// 查看所有 Cookie
print_r($_COOKIE);
删除 Cookie
// 1. 使浏览器端 Cookie 过期
setcookie('user_token', '', time() - 3600, '/');
// 2. 立即移除当前脚本中的值(可选)
unset($_COOKIE['user_token']);
数组 Cookie
// 设置数组
setcookie('user[theme]', 'dark');
setcookie('user[font]', 'Arial');
// 读取时会自动解析为数组
echo $_COOKIE['user']['theme']; // 输出 "dark"
Cookie 安全性
1. 敏感数据加密
可以使用OpenSSL
进行AES-256-CBC
加密,来保证 Cookie 数据的不被他人读取
$encrypted = openssl_encrypt('data', 'AES-256-CBC', $secret_key);
setcookie('secure_data', $encrypted, ['httponly' => true]);
2. 签名防篡改
Cookie 签名防篡改指在 Cookie 内容中加入加密签名,用于验证 Cookie 是否被篡改。
$value = 'user123';
$signature = hash_hmac('sha256', $value, $secret_key);
setcookie('user', $value, ['httponly' => true]);
setcookie('user_sig', $signature, ['httponly' => true]);
// 验证代码
if (hash_hmac('sha256', $_COOKIE['user'], $secret_key) !== $_COOKIE['user_sig']) {
die('Cookie 被篡改!');
3. 限制 Cookie 作用域
通过设置path
和domain
参数,可以限制 Cookie 的作用域,防止跨站访问。
// 仅允许 /admin 路径访问
setcookie('admin_token', 'xxx', ['path' => '/admin/']);
// 仅限特定子域名
setcookie('sub_token', 'xxx', ['domain' => 'api.example.com']);
评论区 0
发表评论
教程介绍
PHP 通用开源服务器端脚本语言,特别适用于 Web 开发,能够嵌入 HTML 中使用。
42
章节
24
阅读
0
评论
反馈提交成功
感谢您的反馈,我们将尽快处理您的反馈