每次$ this-> session-> set_userdata()或$ this-> session-> set_flashdata()在我的控制器中使用,另一个相同的“Set-Cookie:ci_session = ...”被添加到服务器发送的http标头中。
根据rfc6265,http标头中具有相同cookie名称的多个Set-Cookie字段不合适。
那么有没有办法使用codeigniter会话而不创建多个相同的“set-cookie:”?
(我使用curl来验证http标头)
答案 0 :(得分:5)
检查https://github.com/EllisLab/CodeIgniter/pull/1780
默认情况下,当使用cookie会话处理程序(加密或未加密)时,CI会发送整个" Set-Cookie"每次将新值写入会话时都会显示标题。这会导致多个标头被发送到客户端。
这是一个问题,因为如果会话中写入的值太多,HTTP标头会变得非常大,而某些Web服务器会拒绝响应。 (见http://wiki.nginx.org/HttpProxyModule#proxy_buffer_size)
解决方案是只运行sess_save()'在输出页面内容之前发送所有其他标题之后的一次。
答案 1 :(得分:0)
我相信你可以将一个数组传递给$this->session->set_userdata();
我没有测试过这段代码,所以这只是一个尝试沿着这些方向尝试的东西:
$data = array(
'whatever' => 'somevalue',
'youget' => 'theidea'
);
$this->session->set_userdata($data);
注意:当我说我没有测试代码时......我已经使用了这段代码而且我知道它有效,我的意思是我没有测试它是否会减少发送的标头数量。
答案 2 :(得分:0)
就我而言,错误发生在浏览器(Chrome)中。它存储了2个cookie并将它们发送到服务器,这使得服务器始终创建新的会话。 我通过清除浏览器中的cookie来修复它。 希望它对某人有帮助。 :)