gc_maxlifetime已设置为24分钟,但每个应用程序具有不同的sess_expiration。其中一个设置为9000秒(2 1/2小时)。该应用已根据gc_maxlifetime而非sess_expiration过期。这是为什么?如果sess_expiration长于gc_maxlifetime,它怎么能工作?
答案 0 :(得分:0)
从这里开始阅读:why ini_set('session.gc_maxlifetime',60) doesn't work?和此处:https://www.dev-metal.com/how-the-php-session-garbage-collector-really-works/
因为垃圾收集器在会话
之前启动(如果启动)
我认为gc_maxlifetime会在您的CI会话处理程序之前触发,为此它会赢得'。
如果没有被强制修改您的php.ini
文件,您可以尝试在每个session_start之前设置它:
ini_set("session.cookie_lifetime","7200");
ini_set("session.gc_maxlifetime","7200");
session_start();
或者在.htaccess文件中:
php_value session.gc_maxlifetime 7200
php_value session.cookie_lifetime 7200
您可以在此处阅读更多内容:Codeigniter increase session time out not working
希望它有所帮助!
答案 1 :(得分:0)
并不像你说的那么简单......
是是真的gc_maxlifetime
决定是否应该删除会话,因为这实际上是“服务器端计时器”,它会计入删除会话的次数 - 客户端也有一个,因为这是存储cookie的地方
但是,CodeIgniter会将gc_maxlifetime
设置为您放在sess_expiration
,中的相同值,除非它是0 (在这种情况下它使用您的php.ini值)。
但你问题中的其他内容可能很重要:
但是每个应用程序都有不同的sess_expiration。其中一个设置为9000秒(2 1/2小时)
如果您在同一台服务器上使用相同的sess_save_path
,sess_cookie_name
,sess_match_ip
,但对于多个应用程序...则sess_expiration
值最低的应用程序在某些时候会删除您打算对其他人有效的会话。
TL; DR:不要将相同的会话“空间”用于单独的应用程序。