2

私は PHP の初心者で、セッションがどのように機能するかについて頭を悩ませようとしています。PHP でのセッションの動作について一般的な質問がありました。

したがって、 session_start() が呼び出されるたびに、ガベージコレクターが特定の確率で呼び出される可能性があることを理解しています。私の最初の質問は、私の Web サイトのユーザーが 100 人しかいないとしましょう。Web サーバーの session.save_path() フォルダーに 2000 のセッションが保存されています。100 人のユーザーのうちの 1 人であるユーザー A が Web サイトにログインし、session_start() が呼び出された場合、ユーザー A の以前のセッションの 1 つが破棄されるか、またはすべてのユーザーに属する 2000 のセッションのいずれかが破棄されますか?

2 番目の質問は、ユーザー A が約 30 分間 Web サイトにいて、「session.gc_maxlifetime」が 1440 秒 (24 分) に設定されているとします。24 分後にユーザー A のセッションがゴミによって削除される可能性はありますか?ユーザーがまだ Web サイトでアクティブであるにもかかわらず、コレクターですか?

その場合、以前に削除されたセッションと同じ情報をすべて含む新しいセッションが 24 分ごとに開始されます。これは、ユーザー データの損失を防ぐためです。

これらの質問が非常に初歩的なものに聞こえる場合は申し訳ありませんが、セッションの概念についてかなり混乱しているため、概念を明確にしていただきたいと思います.

どんな助けでも大歓迎です。

4

2 に答える 2

2

PHP のセッション ガベージ コレクターは、session.gc_probability を session.gc_divisor で割った値で定義される確率で実行されます。デフォルトでは、これは 1/100 です。これは、上記のタイムアウト値が 100 分の 1 の確率でチェックされることを意味します。

これは、新しいセッションが開始されるたびに、ガベージ コレクターがトリガーされる可能性があることを意味します。maxlifetime より古いすべてのセッションよりも削除されます

誰かがサイトでアクティブな場合、このセッションは決して削除されません。ページが更新されるたびに、実際のセッションはこのセッションの存続期間にリセットされます。使用されていないセッションのみが削除されます。そのため、ユーザーがページで何もせずにアイドリングしている場合、このセッションは削除される可能性があります。そして、彼は新しいセッションを開始する必要があります。

これがセッションを理解するのに役立つことを願っています

于 2012-11-14T03:42:36.090 に答える
0

PHP はセッションの「所有権」を認識しないため、ガベージ コレクションはすべてのセッションに適用されます。以前に変更されたすべてのセッション オブジェクトtime() - ini_get('session.gc_maxlifetime')が削除されます。

を使用して特定のセッション オブジェクトにアクセスするたびsession_start()に、リクエストの終了時 (暗黙的) またはsession_write_close()が呼び出されたとき (明示的)、その変更時刻が更新されます (必要があります)。これは、ユーザーが時々ページをロードし続ける限り、セッションが破棄されないことを意味します。

ところで、セッションの物理ストレージは を使用して変更できるため、ファイルではなくセッション オブジェクトについて話しますsession_set_save_handler()

于 2012-11-14T03:55:48.513 に答える