application/config/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,那么它实际上并没有被视为无限制。它只是永远不会保存会话。将到期时间设置为一年怎么样?
我认为没有必要保留会话,只要它们会在用户关闭浏览器时被删除(我看到您关闭了浏览器,如果用户在浏览器关闭时清除了他们的 cookie)或手动清除他们的 cookie。如果您正在处理登录等,这也是一种安全风险。
您说您正在使用数据库,但您的代码片段有所不同?
$config['sess_use_database'] = FALSE;
尝试使会话到期时间高于会话更新时间,这可能会导致问题。您是否尝试过将到期时间增加到 60 秒并刷新页面几次?