使 CI 会话永久存在


Make CI Session Persist Forever?

我使用的是CodeIgniter的内置会话,而不是PHP会话(阅读更多:http://codeigniter.com/user_guide/libraries/sessions.html)。我还将用户的会话保存到数据库中的表中。我遇到了一个问题,即用户的会话数据将在一段时间不活动后重置为默认值,而我的预期操作是让它永远持续存在/直到用户注销/清除他们的 cookie。

以下是我的CodeIgniter应用程序/配置/配置.php设置:

$config['sess_cookie_name']     = 'ci_session';
$config['sess_expiration']      = 0;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = FALSE;
$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;

从理论上讲,我认为由于sess_expiration设置为 0,它将持续到上面列出的操作之一发生。不幸的是,它看起来只是在 30 分钟左右后超时?我还没有确定这个数字,但关键是它太短了。

我还读过有关 CI 和 AJAX 调用如何遇到一系列问题的信息。虽然我的网站使用了很多 AJAX 调用,但即使有人登录一次,什么都不做,在 ~30 分钟内回来并看到他们已注销,会话也会过期!

编辑:如果有人偶然发现这个话题,仅供将来参考:我正在努力实现"记住我"功能。这将在用户的浏览器中存储一个cookie,并在访问网站时进行检查。据我所知,这是正确的方法,而不是试图让会话无限期地持续下去。

看看/system/libraries/Session 中的 sess_read() 和 sess_update(.php立即使用 last_activity + sess_expiration <检查会话过期时间可能需要更改>$sess_expiration 的默认值

var $sess_expiration            = 7200;