10

我正在使用 CodeIgniter 2.1.0 创建的网站上工作。

我注意到有时当我重新加载页面几次或非常快速地打开几个页面时,或者当我在代码中出现错误(这些错误与会话无关)时,我会被注销。

该网站使用一个名为 Ion_authand 的库进行识别:

public function logged_in()
{
  $identity = $this->ci->config->item('identity', 'ion_auth');
  return (bool) $this->ci->session->userdata($identity);
}

是否有错误或我应该知道的事情?

$config['sess_cookie_name']  = 'cisession';
$config['sess_expiration']  = 7200;
$config['sess_expire_on_close'] = TRUE;
$config['sess_encrypt_cookie'] = FALSE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name']  = 'cisession';
$config['sess_match_ip']  = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300;

在这个网站上,几乎每个页面都会更新会话。

4

2 回答 2

10

这是我发现的:

CodeIgniter 的会话库中有一个错误,它会破坏快速请求的会话。

在这里您可以找到有关此错误的更多信息:

https://github.com/EllisLab/CodeIgniter/issues/154

这个错误仍然存​​在于最新的稳定版本 2.1.3 中。

我已通过将会话库替换为来自 GitHub 的 CI3-DEV 的会话库来解决此问题:

https://github.com/EllisLab/CodeIgniter/blob/b211adee89f5fd2192051e9c0826146bd150f469/system/libraries/Session.php

并在我的配置中放置一个长的 sess_expiration 和 sess_time_to_update ......我的是 86400 和 86500。

于 2013-05-29T12:15:33.040 回答
7

CodeIgniter 将会话数据保存在 cookie 中。如果会话数据有任何取消设置 cookie 的特殊字符,会话也会被销毁。

它还产生了更多的尺寸限制问题。Cookie 可以根据浏览器保存有限大小的数据。如果您尝试在 CodeIgniter 会话中存储更多数据,并且当 CodeIgniter 尝试将其保存在 cookie 中时,它可能不会保存超过该限制。

此外,由于 cookie 通过网络发送,它不必要地增加了网络流量。不应将所有会话数据保存在 cookie 中。

最好使用本机会话库。它使用 PHP 的本地会话。

https://github.com/EllisLab/CodeIgniter/wiki/Native-session

或者

https://github.com/EllisLab/CodeIgniter/wiki/PHPSession

你可以比较两者。

请参阅 CodeIgniter 会话文档,了解 CodeIgniter 如何存储会话数据。

https://www.codeigniter.com/user_guide/libraries/sessions.html

于 2013-05-27T12:52:09.333 回答