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
相关产品推荐
相关产品推荐

