6

$this->session->set_userdata() または $this->session->set_flashdata() がコントローラーで使用されるたびに、別の同一の「Set-Cookie: ci_session=...」が http ヘッダーに追加され、サーバーが送信します。

rfc6265 によると、http ヘッダーに同じ Cookie 名を持つ複数の Set-Cookie フィールドは許可されません。

複数の同一の「set-cookie:」を作成せずに codeigniter セッションを使用する方法はありますか?

(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()' を 1 回だけ実行することです。

于 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 に答える