【问题标题】:Duplicated "set-cookie: ci-session" fields in header by codeignitercodeigniter 在标头中重复的“set-cookie:ci-session”字段
【发布时间】:2012-04-30 23:53:23
【问题描述】:

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

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

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

(我已经使用 curl 来验证 http 头)

【问题讨论】:

    标签: codeigniter session cookies http-headers duplication


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      我相信您可以将数组传递给$this->session->set_userdata(); 我还没有测试过这段代码,所以这只是一个建议,可以尝试以下方式:

      $data = array(
          'whatever' => 'somevalue',
          'youget' => 'theidea'
      );
      
      $this->session->set_userdata($data);
      

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

      【讨论】:

      • 问题在于,codigniter 创建第一个会话 cookie 只是为了请求页面,所以只需一个 $this->session->set_userdata() 调用就会有两个“Set-Cookie: ci_session=..."s.
      • 就个人而言,根据使用 CodeIgniter 的实际项目的经验,我不使用 CI 会话。我更喜欢使用原生 php 会话和原生 php 会话函数。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2014-06-08
        • 1970-01-01
        • 2021-01-26
        • 2011-09-26
        • 2017-09-23
        • 2019-11-12
        • 2011-07-04
        • 2019-03-21
        • 2019-07-20
        相关资源
        最近更新 更多