0

应用程序/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 分钟更新一次:ci_sessions 表$config['sess_time_to_update'] = 300;中有大量未使用的行。一天内只有 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?

4

1 回答 1

0

可能是因为如果会话过期设置为 0,那么它实际上并没有被视为无限制。它只是从不保存会话。将有效期设置为一年怎么样?

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

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

$config['sess_use_database']    = FALSE;

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

于 2013-10-04T09:21:08.933 回答