3

この質問を 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を使用する方法はありますか? 私は何か間違ったことをしていますか?どんな助けでも大歓迎です。ありがとうございました

4

1 に答える 1