You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firefox 60及Chrome中带过期时间的Cookie无法正常接收问题

问题原因分析与解决方案

这是个非常典型的新手误区,我来帮你理清问题所在:

核心错误:Cookie过期参数的理解偏差

PHP的setcookie()函数第三个参数要求的是未来的Unix时间戳(即从1970年1月1日00:00:00 UTC到目标时间的秒数),而不是从当前时间开始的偏移秒数。

你写的代码:

setcookie("name", "value", 60*60*24*365);

这里的60*60*24*365是一年的秒数(31536000),但这个数值对应的Unix时间戳是1971年1月1日左右,属于过去的时间。浏览器检测到Cookie已经过期,会直接拒绝存储它,自然就看不到效果了。

而会话Cookie的写法:

setcookie("name", "value", 0);

当第三个参数设为0(或者省略该参数)时,浏览器会将其识别为会话级Cookie,这类Cookie不会设置固定过期时间,只会在浏览器关闭时失效,所以能正常被接收。

正确的写法

你需要把当前时间戳加上一年的秒数,得到未来的时间点:

// 方式1:用time()计算偏移
setcookie("name", "value", time() + 60*60*24*365);

或者用更直观的strtotime()函数(PHP 5.2+支持),可读性更强:

// 方式2:用strtotime直接指定相对时间
setcookie("name", "value", strtotime('+1 year'));

额外注意事项

  • 确保服务器的系统时间是准确的,如果服务器时区或时间有误,可能会导致Cookie过期时间计算偏差。
  • 如果需要设置Cookie的域名、路径等参数,记得在后续参数中正确配置,避免因作用域问题导致Cookie无法生效。

内容的提问来源于stack exchange,提问作者Marco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:18:02