php 8.2 设置 cookie 过期时间必须传 unix 时间戳(整数),推荐 time() + 秒数;支持 $options 数组写法,禁用字符串日期、strtotime() 返回值或省略 expires。

PHP 8.2 中设置 cookie 过期时间,核心仍是传入一个 Unix 时间戳(秒级整数)作为 expires 参数,不能传字符串日期或相对描述(如 "+1 hour")。time() + 秒数偏移量是最常用、最可靠的方式。
直接用 time() 加秒数计算过期时间戳
这是最推荐、最兼容的做法。PHP 的 time() 返回当前时间的 Unix 时间戳(整数),加上所需秒数即可得到未来时间点:
- 1 小时后:
time() + 3600 - 7 天后:
time() + 7 * 86400(即time() + 604800) - 30 天后:
time() + 30 * 86400 - 1 年后(按 365 天算):
time() + 31536000
示例:
phpsetcookie("theme", "dark", time() + 604800, "/", "", false, true);
?>
使用 options 数组方式(PHP 7.3+ 推荐写法)
PHP 8.2 完全支持以关联数组形式传入 $options,语义更清晰,也避免参数顺序出错:
-
"expires"键必须是整数时间戳,不能是字符串 - 其他常用选项可一并声明,如
"path"、"domain"、"secure"、"httponly"
示例:
$options = ["expires" => time() + 3600,
"path" => "/",
"domain" => "",
"secure" => false,
"httponly" => true,
];
setcookie("session_id", "abc123", $options);
?>
不推荐或已废弃的方式
以下做法在 PHP 8.2 中要么无效、要么不安全、要么已被弃用:
- 传入字符串格式日期(如
"Wed, 11 Sep 2026 16:02:00 GMT")→ 会静默失败,cookie 变成会话 Cookie - 用
strtotime()直接返回字符串 →setcookie()要求整数,字符串会被转为 0,导致立即失效 - 省略过期时间或设为
0→ Cookie 仅在本次浏览器会话有效,关闭即丢 - 依赖客户端本地时间做判断 → 过期由浏览器依据自身系统时间执行,务必确保服务器与用户设备时间误差不大
关键注意事项
设置成功不代表浏览器立刻生效 —— cookie 是响应头的一部分,必须在任何输出(包括空格、BOM)之前调用 setcookie():
- 检查是否有
echo、print、HTML 输出或 UTF-8 BOM 前置 - 可通过
headers_sent()检测是否还能发 header - 开发时建议配合浏览器开发者工具的 Application → Cookies 面板验证是否写入及过期时间是否正确
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











