session设置超时时间不生效
我明明设置了config/session配置文件30天的超时,但是还是很快就超时了,感觉这个设置根本没生效
return [
// session name
'name' => 'PHPSESSID',
// SESSION_ID的提交变量,解决flash上传跨域
'var_session_id' => '',
// 驱动方式 支持file cache
'type' => 'file',
// 存储连接标识 当type使用cache的时候有效
'store' => null,
// 过期时间
'expire' => 2592000,
// 前缀
'prefix' => '',
];
看一下cookie的过期时间,虽然一般是无限制的。
看一下cookie的过期时间,虽然一般是无限制的。 原因找到了就是因为cookie设置的是0,浏览器记录的Expires值不是具体时间,而是名为‘Session‘的字符串。当浏览器关闭后,session就丢失了,不知道是不是浏览器新版本特性,Expires不是时间的就丢失了。我既然在session那里设置了具体时间,浏览器session的Expires值就应该是个具体时间吧。 然而我现在只有通过设置cookie的时间,浏览器session的Expires才会是一个具体时间,下次打开才不会丢失。
有可能是浏览器的策略,你试试https下,0的时候会不会自动丢失。或者是不是打开了隐私模式,无记录模式之类的
也有可能是因为前后端分离项目。我现在占时通过设置cookie时间,session才被赋时间才不会丢失
------------------ 原始邮件 ------------------ 发件人: @.>; 发送时间: 2022年9月2日(星期五) 中午11:05 收件人: @.>; 抄送: @.>; @.>; 主题: Re: [top-think/framework] session设置超时时间不生效 (Issue #2755)
有可能是浏览器的策略,你试试https下,0的时候会不会自动丢失。或者是不是打开了隐私模式,无记录模式之类的
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>
前后端分离,域名一样吗?不一样的话,跨域的时候,如果还不是https,那么cookie会更严格。 使用https并且设置试试:
// cookie 启用安全传输
'secure' => true,
// httponly设置
'httponly' => true,
前后端分离,域名一样吗?不一样的话,跨域的时候,如果还不是https,那么cookie会更严格。 使用https并且设置试试:
// cookie 启用安全传输 'secure' => true, // httponly设置 'httponly' => true,
域名是一样的,亲测设了cookie时间后session时间生效且不会丢失了
令人疑惑的是为什么session里面设了expire,浏览器不会记录expire时间,而是记录一个奇怪的'Session'字符串。只有设置cookie的expire,浏览器才会记录expire具体时间。
这就是基本的session机制。session存在服务器,浏览器不知道session的 任何信息。通过cookie的标识符访问指定的session。
中间的验证、安全、匹配等操作都有浏览器和服务器完成了。
如果你使用token的方式,那么一般就要你自己做统一的token携带和后端解码了。