使用Codeigniter数据库会话的永久会话

时间:2013-10-04 09:16:24

标签: php mysql codeigniter session

应用/配置/ 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?

1 个答案:

答案 0 :(得分:0)

可能是因为如果会话过期设置为0,那么它实际上并不被视为无限制。它永远不会保存会话。如何将到期时间设置为一年?

我认为没有必要保持会话这么长时间,因为当用户关闭浏览器时它们会被删除(我看到你有浏览器设置,如果用户在浏览器关闭时清除了cookie,它仍有可能)或手动清除他们的cookie。如果您正在处理登录等,这也是一种安全风险。

您说您使用的是数据库但是您的代码片段有所不同?

$config['sess_use_database']    = FALSE;

尝试将会话到期时间高于会话更新时间,这可能会导致问题。您是否尝试将过期时间增加到60秒并刷新页面几次?