framework icon indicating copy to clipboard operation
framework copied to clipboard

session设置超时时间不生效

Open hafly opened this issue 3 years ago • 8 comments

我明明设置了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'         => '',
];

hafly avatar Sep 01 '22 00:09 hafly

看一下cookie的过期时间,虽然一般是无限制的。

augushong avatar Sep 01 '22 03:09 augushong

看一下cookie的过期时间,虽然一般是无限制的。 原因找到了就是因为cookie设置的是0,浏览器记录的Expires值不是具体时间,而是名为‘Session‘的字符串。当浏览器关闭后,session就丢失了,不知道是不是浏览器新版本特性,Expires不是时间的就丢失了。我既然在session那里设置了具体时间,浏览器session的Expires值就应该是个具体时间吧。 然而我现在只有通过设置cookie的时间,浏览器session的Expires才会是一个具体时间,下次打开才不会丢失。

hafly avatar Sep 02 '22 03:09 hafly

有可能是浏览器的策略,你试试https下,0的时候会不会自动丢失。或者是不是打开了隐私模式,无记录模式之类的

augushong avatar Sep 02 '22 03:09 augushong

也有可能是因为前后端分离项目。我现在占时通过设置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: @.***>

hafly avatar Sep 02 '22 03:09 hafly

前后端分离,域名一样吗?不一样的话,跨域的时候,如果还不是https,那么cookie会更严格。 使用https并且设置试试:

 //  cookie 启用安全传输
    'secure'    => true,
    // httponly设置
    'httponly'  => true,

augushong avatar Sep 02 '22 03:09 augushong

前后端分离,域名一样吗?不一样的话,跨域的时候,如果还不是https,那么cookie会更严格。 使用https并且设置试试:

 //  cookie 启用安全传输
    'secure'    => true,
    // httponly设置
    'httponly'  => true,

域名是一样的,亲测设了cookie时间后session时间生效且不会丢失了

hafly avatar Sep 02 '22 03:09 hafly

令人疑惑的是为什么session里面设了expire,浏览器不会记录expire时间,而是记录一个奇怪的'Session'字符串。只有设置cookie的expire,浏览器才会记录expire具体时间。

hafly avatar Sep 02 '22 03:09 hafly

这就是基本的session机制。session存在服务器,浏览器不知道session的 任何信息。通过cookie的标识符访问指定的session。

中间的验证、安全、匹配等操作都有浏览器和服务器完成了。

如果你使用token的方式,那么一般就要你自己做统一的token携带和后端解码了。

augushong avatar Sep 02 '22 03:09 augushong