2

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

这是我的 CodeIgniter application/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,并在访问网站时对其进行检查。据我所知,这是正确的方法,而不是试图让会话无限期地持续下去。

4

1 回答 1

0

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

var $sess_expiration            = 7200;
于 2012-06-10T16:15:15.850 回答