应用/配置/ config.php中
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 0;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie'] = TRUE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300;
由于我有一个永久会话:$config['sess_expiration'] = 0;
并且会话每5分钟更新一次:$config['sess_time_to_update'] = 300;
ci_sessions表中有大量未使用的行。 在仅有3到4位用户的一天中,ci_sessions表数据达到了1 mb
所以,我想做类似的事情:
$config['sess_expiration'] = 0;
$config['sess_time_to_update'] = 60*60*24*365*2;
and
var $gc_probability = 0;
2年的到期时间和更新时间,因此对于单个浏览器,ci_sessions表中只有1个条目永远不会被删除,因为gc概率为0.我将拥有自己的清理代码每个月左右删除未使用的会话。但问题是:
它不仅仅是会话更新,它会进入新的 ci_sessions表,但每次刷新都会生成一个新条目。会的 产生同样存在大量未使用会话的问题。
如何在每次刷新或页面调用时避免新的会话ID?
答案 0 :(得分:0)
可能是因为如果会话过期设置为0,那么它实际上并不被视为无限制。它永远不会保存会话。如何将到期时间设置为一年?
我认为没有必要保持会话这么长时间,因为当用户关闭浏览器时它们会被删除(我看到你有浏览器设置,如果用户在浏览器关闭时清除了cookie,它仍有可能)或手动清除他们的cookie。如果您正在处理登录等,这也是一种安全风险。
您说您使用的是数据库但是您的代码片段有所不同?
$config['sess_use_database'] = FALSE;
尝试将会话到期时间高于会话更新时间,这可能会导致问题。您是否尝试将过期时间增加到60秒并刷新页面几次?