PHP中删除Cookie失效问题:已尝试unset及设置过期仍未解决
我之前也踩过这个Cookie清除的坑!咱们一步步拆解你遇到的问题:
为什么你的代码没完全生效?
unset($_COOKIE)的局限性:unset($_COOKIE["lifting365_last_name"])只是删掉当前PHP脚本内存里的Cookie变量,根本碰不到浏览器存储的Cookie——下次用户发起请求,浏览器还是会把这个Cookie再发过来。setcookie参数不匹配:你用setcookie("lifting365_customer_id", "", time()-3600)的时候,可能没和当初设置这个Cookie时的路径、域名、安全标志保持一致。比如原Cookie是设置在根路径/下的,你清除时没指定路径,默认是当前脚本所在路径,这就没法覆盖原来的Cookie,浏览器自然不会删它。- 当前脚本的
$_COOKIE不会实时更新:$_COOKIE是PHP脚本启动时从请求头里读取的,哪怕你用setcookie发了删除指令,当前脚本里的$_COOKIE数组还是原来的样子——必须手动unset对应的键,再var_dump才会看不到。
正确的清除步骤
要彻底清除Cookie,必须保证setcookie的参数和当初设置时完全一致,同时手动清理当前脚本的$_COOKIE变量:
// 假设你当初设置Cookie时的参数是:路径/、无指定域名、非secure、HttpOnly // 清除 lifting365_last_name setcookie("lifting365_last_name", "", time() - 3600, "/", "", false, true); unset($_COOKIE["lifting365_last_name"]); // 清除 lifting365_customer_id setcookie("lifting365_customer_id", "", time() - 3600, "/", "", false, true); unset($_COOKIE["lifting365_customer_id"]);
测试注意事项
- 如果是在同一个脚本里执行清除后马上
var_dump($_COOKIE),一定要先unset对应的键,不然会显示原来的请求值; - 真正验证是否清除成功,要刷新页面或者发起新请求——这时候浏览器会把更新后的Cookie(已删除)发送过来,你再
var_dump就看不到目标Cookie了。
内容的提问来源于stack exchange,提问作者Paddy Hallihan
相关产品推荐
相关产品推荐

