今日のセッションを検討した結果、理解が深まりましたが、いくつか疑問もありました。分析を手伝ってください。
<オル>最初の質問は、PHP にはセッションにガベージ コレクション メカニズムがあるということです。原則として、ガベージ コレクション メカニズムは session_start
がトリガーされる回数だけトリガーされる可能性があります。そこで私の質問は、セッションが 1440 秒を経過したにもかかわらず、リサイクルがすぐにトリガーされず、おそらく 5 分以内にトリガーされなかった場合、現時点でもセッション データを取得できるかということです。
2 番目の質問は、セッションの有効期限の原則に関するものです。どの書籍にも、セッション ファイルの変更時刻に基づいていると記載されています。私の質問は次のとおりです。 1) 通常、セッション データを変更せずに Web サイトにアクセスすると、1440 秒後に正確に終了しますか? 2) それとも、Web ページを更新するたびに、セッション ファイルが filemtime
で変更されるという意味ですか?セッションの実行原理とは何ですか。
3 番目の問題は、PHP の session_set_save_handler
の設定の問題です。session が filemtime
をどのように処理するかを知ることによってのみ、session_set_sa を適切に記述することができます。 ve_handler
の read
メソッド。Web ページが更新されるたびに filemtime
が変更される場合は、read
で変更する必要があるためです。 >< code>ファイル時間。
取得したコードはPHP経由で読み込まれ、その読み込み処理で有効期限が切れていないか再度チェックされるため、原則として取得することはできません。
1) php.ini で設定された時間は正確であり、デフォルトは 1440 です。この設定はプログラムで変更できますが、構成ファイルを変更することをお勧めします。なぜ善悪は無効だと言われているのでしょうか? PHP はメモリ常駐ではないため、各リクエストを使用して特定のスケジュールされたタスクがトリガーされるかどうかを確認する必要があります。これは、PHP が制御する 2 つのパラメーターによって引き起こされるパフォーマンスの損失を軽減するためです。ガベージ コレクションの確率はそれぞれ session.gc_probability と session.gc_pisor です。たとえば、1/100 の場合、少なくとも 100 回のリクエストでトリガーされます。
2) 更新されるたびに、ファイル時間は変化します。
Laravel フレームワークのセッション実装を確認しました。以下はファイル ストレージとデータベース ストレージの形式です。
リーリー リーリーテスト後、ファイルストレージの場合、session.gc_maxlifetimeを30秒に設定すると、30秒を超えてもセッションデータは解放されます。そして、次の更新の場合、filemtime は実際に現在のものに変更されます。
その理由を説明してカスタムストレージをmemcacheに変更できる人はいますか、それともデータベースはファイルと同じ形式で保存されますか?