6

每次在我的控制器中使用 $this->session->set_userdata() 或 $this->session->set_flashdata() 时,都会将另一个相同的“Set-Cookie: ci_session=...”添加到 http 标头中服务器发送。

根据 rfc6265,http 标头中的多个 Set-Cookie 字段,具有相同的 cookie 名称是不行的。

那么有没有办法使用codeigniter会话而不创建多个相同的“set-cookie:”?

(我使用 curl 来验证 http 标头)

4

3 回答 3

5

检查https://github.com/EllisLab/CodeIgniter/pull/1780

默认情况下,当使用 cookie 会话处理程序(加密或未加密)时,每次将新值写入会话时,CI 都会发送整个“Set-Cookie”标头。这导致将多个标头发送到客户端。

这是一个问题,因为如果将太多值写入会话,HTTP 标头会变得非常大,并且某些 Web 服务器会拒绝响应。(见http://wiki.nginx.org/HttpProxyModule#proxy_buffer_size

解决方案是在所有其他标头都发送后,在输出页面内容之前仅运行一次“sess_save()”。

于 2012-12-07T12:59:31.950 回答
0

我相信你可以将一个数组传递给$this->session->set_userdata();我没有测试过这段代码,所以这只是一个尝试按照这些思路进行的建议:

$data = array(
    'whatever' => 'somevalue',
    'youget' => 'theidea'
);

$this->session->set_userdata($data);

注意:当我说我没有测试过代码时。我已经使用过这个代码并且我知道它可以工作,我的意思是我还没有测试过它是否会减少发送的标头数量。

于 2012-04-19T14:13:17.787 回答
0

就我而言,错误出在浏览器(Chrome)中。它存储了 2 个 cookie 并将它们都发送到服务器,这使得服务器始终创建新会话。我通过清除浏览器中的 cookie 来修复它。希望它可以帮助某人。:)

于 2015-01-26T16:15:28.730 回答