通常の状況では、ページにある「終了」ボタンをクリックするとセッションを破棄できます。ただし、ユーザーが終了ボタンをクリックせずに直接ブラウザを閉じたり、インターネット接続を切断したり、停電などでコンピュータを直接シャットダウンした場合には、サーバー上に保存されているセッションファイルは削除されません。ブラウザを閉じても、次回ログインするには新しいセッション ID を割り当てる必要がありますが、これは php.ini でセッション ID の有効期間を設定するための設定
session.cookie_lifetime = 0 によるものです。クライアント Cookie は、ブラウザに送信される Cookie の 存続期間 を指定します。値 0 は「ブラウザを閉じるまで」を意味し、デフォルトは 0 です。
システムがセッションに有効期間を与えると、ブラウザが開いているかどうかに関係なく、セッション ID は自動的に消えます。クライアントのセッションIDは消えますが、サーバーに保存されているセッションファイルは削除されません。したがって、セッション ID によって参照されないサーバー側のセッション ファイルは「ゴミ」になります。 これらのジャンク セッション ファイルがシステムに過剰な負荷を引き起こすことを防ぐために (セッションは Cookie のような半永久的な存在ではないため)、システムには、決して使用されないセッション ファイル (ジャンク ファイル) の自動クリーニング メカニズムが備わっています。 サーバー上に保存されるセッションファイルは普通のテキストファイルなので、ファイルの変更時刻が記録されます。 「ガベージ コレクション プログラム」が開始されると、セッション ファイルの変更時刻に基づいて、期限切れのセッション ファイルがすべて削除されます。「ガベージコレクションプログラム」の起動機構とは何ですか?
「ガベージコレクションプログラム」は、session_start()関数が呼び出されたときに開始されます。 Web サイトには複数のスクリプトがあり、各スクリプトは session_start() 関数を使用してセッションを開始する必要があり、多くのユーザーが同時にアクセスするため、session_start() 関数が呼び出される可能性が高くなります。 1 秒間に 2 回実行され、毎回「ガベージ コレクション プログラム」が開始されるのは不合理です。少なくとも15分に1回「ゴミ収集プログラム」を起動したとしても、1日に100回以上の清掃が行われることになり、頻度が高すぎます。 php.ini ファイルの session.gc_probability および session.gc_divisor オプションを変更して、ガベージ コレクション プログラムを開始する確率を設定します。システムは、session.gc_probability/session.gc_divisor 式に基づいて確率を計算します。たとえば、オプション session.gc_probability = 1、オプション session.gc_divisor = 100 であるため、確率は 1/100、つまり session_start になります。 () 関数が呼び出される 100 「ガベージ コレクション プログラム」は毎回 1 回だけ起動されます。したがって、セッション ページにアクセスする頻度が高くなるほど、セッション ページが開始される可能性は低くなります。一般に、開始する前に 1000 ~ 5000 回呼び出すことをお勧めします: 1/(1000 ~ 5000)。
以上がPHPにおけるセッションの自動リサイクル機構の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。