PHP Cookie 全面详解
1. 什么是 Cookie?
Cookie 是存储在用户浏览器中的小型文本数据,通常用于保存用户会话信息、偏好设置、跟踪用户行为等。PHP 提供了内置的 setcookie() 函数来操作 Cookie。
2. 设置 Cookie
PHP 使用 setcookie() 函数来创建 Cookie:
setcookie(name, value, expire, path, domain, secure, httponly);
参数说明:
| 参数 | 说明 |
|---|---|
name | Cookie 名称 |
value | Cookie 值 |
expire | 过期时间(Unix 时间戳,time() + 秒数) |
path | 适用路径(/ 表示整个网站) |
domain | 适用域名(.example.com 适用于所有子域) |
secure | true 仅在 HTTPS 连接下传输 |
httponly | true 防止 JavaScript 访问(防范 XSS 攻击) |
示例:设置一个 1 小时后过期的 Cookie
setcookie("user", "JohnDoe", time() + 3600, "/");
3. 读取 Cookie
PHP 通过 $_COOKIE 超全局数组访问 Cookie:
if (isset($_COOKIE['user'])) {
echo "Hello, " . $_COOKIE['user'];
} else {
echo "Cookie 未设置";
}
4. 删除 Cookie
要删除 Cookie,可以将 setcookie() 的 expire 参数设为过去的时间:
setcookie("user", "", time() - 3600, "/");
5. Cookie 安全性
为了提高 Cookie 的安全性,建议:
- 使用
secure参数:在 HTTPS 站点上设置setcookie()的secure=true,防止明文传输:
setcookie("user", "JohnDoe", time() + 3600, "/", "", true, true);
- 使用
httponly参数:防止 JavaScript 访问,防范 XSS 攻击:
setcookie("user", "JohnDoe", time() + 3600, "/", "", false, true);
- 使用
SameSite保护(PHP 7.3+ 支持):
setcookie("user", "JohnDoe", [
'expires' => time() + 3600,
'path' => '/',
'secure' => true,
'httponly' => true,
'samesite' => 'Strict' // 'Lax' 或 'Strict'
]);
6. Cookie 与 Session 的区别
| 对比项 | Cookie | Session |
|---|---|---|
| 存储位置 | 客户端浏览器 | 服务器端 |
| 适用范围 | 跨多个页面持久存储 | 仅限当前会话 |
| 生命周期 | 可设置过期时间 | 默认会话关闭后销毁 |
| 安全性 | 易被篡改 | 更安全 |
如果涉及用户身份验证,建议使用 Session 而非 Cookie。
7. 常见问题
Q1: 为什么 setcookie() 没有生效?
setcookie()必须在任何输出之前调用(包括 HTML 代码或echo)。- 确保未调用
session_start()之前输出内容。
Q2: 如何查看 Cookie?
- 在浏览器控制台 (
F12→Application→Storage→Cookies) 查看。
8. 参考资料
更多详细内容请关注其他相关文章!