Codeigniter中头部出现了重复的“set-cookie: ci-session”字段

6
每次在我的控制器中使用$this->session->set_userdata()或$this->session->set_flashdata(),服务器发送的http标头中都会添加另一个相同的“Set-Cookie: ci_session = ...”。
根据rfc6265,http标头中具有相同cookie名称的多个Set-Cookie字段是不合适的。
那么有没有一种方法可以在不创建多个相同的“set-cookie:”的情况下使用codeigniter会话?
(我已经使用curl验证了http标头)
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()'。


0
在我的情况下,错误出现在浏览器(Chrome)中。它存储了2个cookie并将两者都发送到服务器,这使得服务器一直创建新会话。 我通过清除浏览器中的cookie来解决它。 希望能对某些人有所帮助。 :)

0

我相信你可以将一个数组传递给$this->session->set_userdata();。虽然我没有测试过这段代码,但这只是一个建议,可以尝试类似这样的方法:

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

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

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

问题在于CodeIgniter会为请求页面创建第一个会话cookie,因此仅使用一个$this->session->set_userdata()调用将会有两个"Set-Cookie: ci_session=..."。 - mathulus
就我个人而言,并且通过使用CodeIgniter进行真实项目的经验,我不使用CI会话。我更喜欢使用本地php会话和本地php会话函数。 - Dale

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接