使CI会话永远坚持下去?

时间:2012-06-10 14:57:35

标签: php codeigniter session

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

以下是我的CodeIgniter应用程序/ config / config.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,并在访问网站时进行检查。就我所见,这是正确的方法,而不是试图无限期地进行会议。

1 个答案:

答案 0 :(得分:0)

在/system/libraries/Session.php中查看sess_read()和sess_update() 使用last_activity + sess_expiration<来检查会话到期时间。现在 您可能需要更改 $ sess_expiration

的默认值
var $sess_expiration            = 7200;