この質問を CI フォーラムに投稿しましたが、回答がないため、ここで試しています。
シングル ページ アプリから JSON 呼び出しを提供する REST API に CI を使用しています。CI 2.x では、一部のリクエストがセッション ID を変更している間に、リクエストの「チェーン」が短時間で発生した場合に、セッション ID の再生成に問題がありました。真新しいセッション ライブラリを備えた CI 3 で修正されることを期待しました。
3.0 にアップグレードし、セッション ドキュメントを注意深く読み、いくつかのテストを行いました。私の見解では、CI 2.x で発生した問題は 3.0 でも解決されていません。
httpリクエストの例で説明しましょう(実際のアプリから実際に観察されます):
セッション ID は変更されません:
GET ... Request cookies: ci_session=123,
Response cookies:
GET ... Request cookies: ci_session=123,
Response cookies:
...
セッション ID が再生成されます:
GET ... Request cookies: ci_session=123,
Response cookies: ci_session: <deleted>, ci_session: 456
このリクエストは、以前のリクエストが返されたよりも早く開始されたため、古いセッション ID を保持しています。
GET ... Request cookies: ci_session=123,
Response cookies:
しかし、セッション ID 123 はもはや有効ではないため、リクエストは認証されていないと見なされます。
新しいセッション ライブラリに追加されたロックは、これを妨げないようです。
私のセッション構成は次のとおりです。
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = <some path>
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 60;
$config['sess_regenerate_destroy'] = TRUE;
最初のリクエスト認証後に session_write_close() を使用しています。
このキングオブリクエストにCI 3を使用する方法はありますか? 私は何か間違ったことをしていますか?どんな助けでも大歓迎です。ありがとうございました