PHP中操作Cookie的核心逻辑其实非常直观:设置、读取和删除。你可以把它想象成在用户浏览器里贴了个小标签,我们用
setcookie()
$_COOKIE
在PHP中,Cookie的操作主要围绕
setcookie()
$_COOKIE
1. 设置 Cookie
使用
setcookie()
立即学习“PHP免费学习笔记(深入)”;
<?php // 设置一个名为 'user_id',值为 '12345' 的Cookie // 有效期为1小时 (time() + 3600) // 对整个网站路径 '/' 有效 // 仅在当前域名下有效 (通常省略,或明确指定) // 仅在HTTPS连接下发送 (true) // 无法通过JavaScript访问 (true),防止XSS攻击 setcookie("user_id", "12345", [ 'expires' => time() + 3600, 'path' => '/', 'domain' => '', // 通常留空,表示当前域名 'secure' => true, // 仅在HTTPS下发送 'httponly' => true, // 无法通过JS访问 'samesite' => 'Lax' // 缓解CSRF攻击 ]); // 设置一个记住用户名的Cookie,有效期更长,例如7天 setcookie("username", "john_doe", [ 'expires' => time() + (86400 * 7), // 7天 'path' => '/', 'secure' => true, 'httponly' => true, 'samesite' => 'Lax' ]); // 也可以使用传统的参数列表形式,但数组形式更清晰,尤其是在PHP 7.3+ // setcookie("user_id", "12345", time() + 3600, "/", "", true, true); echo "Cookie已设置。"; ?>
setcookie()
name
value
expires
0
path
/
domain
secure
true
httponly
true
samesite
Lax
Strict
None
Lax
2. 读取 Cookie
已设置的Cookie可以通过
$_COOKIE
<?php // 确保在读取之前,Cookie已经被浏览器发送回来 // 这通常发生在页面加载之后,或者重定向之后 if (isset($_COOKIE["user_id"])) { $userId = $_COOKIE["user_id"]; echo "用户ID是: " . htmlspecialchars($userId); } else { echo "未找到用户ID Cookie。"; } if (isset($_COOKIE["username"])) { $username = $_COOKIE["username"]; echo "<br>用户名是: " . htmlspecialchars($username); } else { echo "<br>未找到用户名 Cookie。"; } ?>
这里需要注意一点,
$_COOKIE
3. 删除 Cookie
删除Cookie的本质是设置一个已经过去的过期时间。这样浏览器会立即将其视为无效并删除。
<?php // 删除名为 'user_id' 的Cookie // 注意:路径、域名等参数必须与设置时完全一致,否则无法删除 setcookie("user_id", "", [ 'expires' => time() - 3600, // 设置为过去的时间 'path' => '/', 'domain' => '', 'secure' => true, 'httponly' => true, 'samesite' => 'Lax' ]); // 删除名为 'username' 的Cookie setcookie("username", "", [ 'expires' => time() - 3600, // 设置为过去的时间 'path' => '/', 'secure' => true, 'httponly' => true, 'samesite' => 'Lax' ]); echo "Cookie已尝试删除。"; ?>
再次强调,删除Cookie时,
name
path
domain
谈到Cookie,安全性绝对是绕不过去的话题。毕竟,这些小数据片在用户浏览器里晃悠,很容易成为攻击者的目标。我个人在处理用户认证时,对Cookie的安全性总是抱着十二分的警惕。
首先,httponly
httponly
document.cookie
httponly
其次,secure
secure
secure
再者,samesite
Strict
Lax
Lax
None
secure
Lax
None
最后,不要在Cookie中直接存储敏感信息。密码、信用卡号、个人身份信息等,这些绝不能直接放在Cookie里。Cookie很容易被用户查看和修改,甚至被第三方工具拦截。正确的做法是,在Cookie中存储一个不敏感的、随机生成的会话ID或令牌,然后将真正的敏感数据存储在服务器端的Session中,通过这个ID进行关联。这样即使Cookie被窃取,攻击者也只能拿到一个ID,而无法直接获取到用户的敏感数据。
这是一个老生常谈的问题,但其重要性不言而喻。Cookie和Session都是用于维持Web应用状态的机制,但它们的实现原理、存储位置和适用场景大相径庭。理解它们之间的差异,对于构建健壮安全的Web应用至关重要。
Cookie,就像我们前面说的,是服务器发送给浏览器的一小段文本信息,存储在客户端(用户的浏览器)上。它的特点是:
Session,则是一个服务器端的机制。当用户访问网站时,服务器会为这个用户创建一个唯一的Session,并将Session ID(通常是一个随机字符串)通过Cookie发送给浏览器。浏览器在后续请求中带上这个Session ID,服务器就能识别用户并加载对应的Session数据。它的特点是:
何时选用?
我的经验是,选择哪种机制,主要取决于数据的敏感性、大小以及你希望数据存储在哪里。
选用Cookie的场景:
选用Session的场景:
简单来说,Cookie是你的“小纸条”,适合记录一些不那么重要、可以公开或者方便用户修改的信息;而Session则是你的“保险柜”,用来存放那些需要严格保密、不希望被篡改的关键信息。两者经常配合使用,Session ID通过Cookie传递,共同构建了Web应用的状态管理体系。
即便Cookie看似简单,但在实际开发中,我见过不少开发者在这里踩坑。有些问题看似细微,却可能导致功能异常或安全漏洞。
常见陷阱:
setcookie()
setcookie()
echo
<?php echo "Hello World!"; // 这里已经有输出了 setcookie("test", "value"); // 会报错 ?>
正确做法是,确保所有
setcookie()
过期时间设置不当:
time()
路径和域名不匹配:删除或更新Cookie时,
path
domain
/blog
/
未设置httponly
secure
httponly
secure
直接存储敏感数据:前面已经强调过,这是大忌。Cookie不是保险箱,不要放密码、支付信息等。
最佳实践:
始终在脚本顶部设置Cookie:为了避免“Headers already sent”错误,一个好的习惯是将所有
setcookie()
echo
ob_start()
合理设置过期时间:
使用数组形式的setcookie()
setcookie("name", "value", ['expires' => time() + 3600, 'path' => '/', 'secure' => true, 'httponly' => true, 'samesite' => 'Lax']);
为所有重要Cookie设置httponly
secure
secure
利用samesite
Lax
Strict
None
只存储非敏感标识符:Cookie中只存放Session ID、加密的令牌或用户偏好等非敏感数据。真正敏感的用户信息应该存储在服务器端的Session中。
封装Cookie操作:如果你在构建一个大型应用,考虑创建一个专门的Cookie管理类或函数。这样可以集中处理Cookie的设置、读取和删除逻辑,确保所有Cookie都遵循统一的安全和最佳实践,例如自动添加
httponly
secure
samesite
以上就是PHP代码怎么使用Cookie_ PHP Cookie设置读取与删除方法的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 //m.sbmmt.com/ All Rights Reserved | php.cn | 湘ICP备2023035733号