“复制”;设置cookie:ci会话“;codeigniter在标头中的字段

“复制”;设置cookie:ci会话“;codeigniter在标头中的字段,codeigniter,session,cookies,http-headers,duplication,Codeigniter,Session,Cookies,Http Headers,Duplication,每次在我的控制器中使用$this->session->set_userdata()或$this->session->set_flashdata(),服务器发送的http头中都会添加另一个相同的“set Cookie:ci_session=…” 根据rfc6265,http头中具有相同Cookie名称的多个Set Cookie字段不正常 那么,有没有一种方法可以使用codeigniter会话而不创建多个相同的“set cookie:”呢 (我用curl来验证http头)我相信您可以将数组传递给$t

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

根据rfc6265,http头中具有相同Cookie名称的多个Set Cookie字段不正常

那么,有没有一种方法可以使用codeigniter会话而不创建多个相同的“set cookie:”呢


(我用curl来验证http头)

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

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

$this->session->set_userdata($data);
注意:当我说我还没有测试代码时。。我已经使用了这段代码,我知道它是有效的,我的意思是我还没有测试它是否会减少发送的头的数量。

检查

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

这是一个问题,因为如果向会话写入太多的值,HTTP头可能会变得相当大,一些web服务器会拒绝响应。(见附件)

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


在我的例子中,错误在浏览器(Chrome)中。它存储了2个cookie并将它们发送到服务器,这使得服务器一直在创建新会话。 我通过清除浏览器中的cookies修复了它。
希望它能帮助别人。:)

问题是,codigniter只为请求页面创建第一个会话cookie,因此,只要调用一个$this->session->set_userdata(),就会有两个“set cookie:ci_session=…”。就个人而言,根据使用codigniter的实际项目经验,我不使用ci会话。我更喜欢使用本机php会话和本机php会话函数。