ThinkPHP 5.1中Cookie有效期由expire参数控制,单位为秒;可全局配置于config/cookie.php,也可运行时动态设置,后者优先级更高;expire=0表示会话级(关闭浏览器失效),永久需设正整数或用forever()。

ThinkPHP 5.1 中 Cookie 有效期主要通过 expire 参数控制,它决定浏览器中 Cookie 的保留时长(单位:秒)。这个参数既可在全局配置中统一设定,也可在单次设置时动态指定,两者逻辑不同、生效场景也不同。
全局配置 cookie.php 文件
推荐方式是统一维护在 config/cookie.php 配置文件中:
- 该文件默认存在,若无则可手动创建
- 返回一个关联数组,其中
'expire'键即为默认有效期 - 例如设为 1 小时:
return ['expire' => 3600]; - 其他常用配置项包括:
prefix(前缀)、path(路径)、domain(域名)、httponly(防 XSS)、secure(仅 HTTPS)
运行时动态设置 expire
调用 cookie() 函数或 Cookie::set() 方法时,可单独传入有效期,优先级高于全局配置:
- 基础写法:
cookie('token', 'abc123', 7200);→ 2 小时 - 带完整选项:
cookie('user_id', 1001, ['expire'=>86400, 'path'=>'/', 'domain'=>'.example.com']); - 使用数组参数时,未指定的项会自动合并全局配置值
注意 expire=0 和永久保存的区别
有效期设为 0 表示“浏览器关闭后失效”,不是永久;如需真正长期有效,应设为较大正整数(如 31536000 = 1 年),或使用 Cookie::forever() 方法:
-
Cookie::forever('theme', 'dark');等价于Cookie::set('theme', 'dark', 31536000); - 底层仍依赖系统时间戳,不建议设为无限大数值(如 PHP_INT_MAX),可能引发兼容问题
配合 domain 实现跨子域共享时的有效期
若需让 user.example.com 和 api.example.com 共享 Cookie,除设置 domain => '.example.com' 外,必须确保 expire 值为正数:
- 设为
0会导致浏览器不写入Expires字段,跨域 Cookie 在部分浏览器中无法稳定保留 - 同时检查服务器时间是否准确,过期时间基于客户端本地时间计算
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











