1

我有一种情况,我需要将信息存储到 codeigniters 会话中 -> 能够关闭浏览器窗口 -> 然后打开浏览器窗口并让它恢复我存储在会话中的所有项目。我知道codeigniter实际上并没有使用会话而是使用cookie,所以这应该很容易......但事实并非如此。

在 FF / Safari / Chrome 中这工作正常,但在 IE 9 中,当我关闭然后重新打开窗口时,它会重新生成会话 ID 并且不会拉回数据。

例如这个简单的代码:

$this->CI->session->set_userdata('username','My Username');
echo $this->CI->session->userdata('username');

当按预期运行第一次输出时。然后我注释掉第 1 行并刷新屏幕,会话数据再次正确显示。

现在我关闭浏览器窗口并将其打开到同一页面,再次注释掉第 1 行。它找不到会话数据,并且会话 ID 现在已更改。

我在 codeigiter 中将会话保存到数据库中,我的会话配置如下所示:

$config['sess_cookie_name']     = 'bcsession';
$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'] = FALSE;
$config['sess_time_to_update']  = 300;
4

3 回答 3

3

您需要设置 config.php:

$config['sess_expiration'] = 写入秒数

这是您希望会话持续的秒数。默认值为 2 小时(7200 秒)。如果您想要一个没有过期的会话,请将值设置为零:0。

$config['sess_expire_on_close'] = TRUE;

关闭浏览器窗口时是否使会话自动过期。FALSE 是默认值,但您需要更改。

更多详情请阅读:http: //www.codeigniter.com/userguide2/libraries/sessions.html

非常感谢

于 2013-06-07T14:30:30.210 回答
1

我已经找到了解决方案,以防它影响其他人。

CI 会话实际上是 cookie,就像我上面的逻辑一样,但是我不敢相信我没有发现它,但是 IE 具有在退出时删除浏览器历史记录/cookies/缓存的设置。这是票。

为什么你总是先看最复杂的原因而不是最明显的原因!

于 2013-06-07T14:10:03.140 回答
0

我相信sess_expiration可能需要一个非零值来解决您的问题。试试看,删除数据库表中的会话,然后再试一次。

来自即使在浏览器关闭后也可以保持会话吗?

使用 session_set_cookie_parameters() 在开始会话之前给会话 cookie 一个非零的生命周期,或者将 session.cookie_lifetime 设置为非零。

Codeigniter 将调用该函数,$config['sess_expiration']因此请尝试将其设置为非零值。

于 2013-06-06T16:43:59.107 回答