1

情報を codeigniters セッションに保存する必要がある状況があります->ブラウザーウィンドウを閉じることができます->ブラウザーウィンドウを開いて、セッションに保存したすべてのアイテムを回復します。codeigniter は実際にはセッションを使用せず、代わりに Cookie を使用することを知っているので、これは非常に簡単なはずです....しかし、そうではありません。

FF / Safari / Chrome ではこれは正常に動作しますが、IE 9 ではウィンドウを閉じてから再度開くと、セッション ID が再生成され、データが引き戻されません。

たとえば、この単純なコード:

$this->CI->session->set_userdata('username','My Username');
echo $this->CI->session->userdata('username');

初めて実行すると、期待どおりに出力されます。次に、1 行目をコメントアウトして画面を更新すると、セッション データが再び正しく表示されます。

ここで、ブラウザー ウィンドウを閉じて、同じページに戻ります。ここでも 1 行目がコメント アウトされています。セッション データが見つからず、セッション ID が変更されました。

codeigiter でデータベースに保存するセッションがあり、セッション構成は次のようになります。

$config['sess_cookie_name']     = 'bcsession';
$config['sess_expiration']      = 0;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = TRUE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = FALSE;
$config['sess_time_to_update']  = 300;
4

3 に答える 3

1

他の人に影響を与える場合に備えて、これに対する解決策を見つけました。

上記の私のロジックのように、CI セッションは実際には Cookie ですが、それを見つけられなかったとは信じられませんが、IE には、終了時にブラウザーの履歴/Cookie/キャッシュを削除する設定があります。これがチケットでした。

なぜあなたはいつも最も明白な理由ではなく、最も複雑な理由を最初に見るのですか!

于 2013-06-07T14:10:03.140 に答える
0

問題を解決するには、ゼロ以外のsess_expiration値が必要になる場合があると思います。それを試して、データベース テーブルのセッションを削除し、もう一度試してみてください。

からブラウザを閉じてもセッションを維持できますか? :

session_set_cookie_parameters() を使用して、セッションを開始する前にセッション cookie にゼロ以外の有効期間を指定するか、session.cookie_lifetime をゼロ以外に設定します。

Codeigniter はその関数を呼び出す$config['sess_expiration']ので、ゼロ以外の値に設定してみてください。

于 2013-06-06T16:43:59.107 に答える