PHP では、このオブジェクトを指す変数がない場合、このオブジェクトはガベージになります。 PHP はこれをメモリ内で破棄します。これは、メモリ オーバーフローを防ぐための PHP の GC ガベージ処理メカニズムです。
GC の仕事は、すべての Session
情報をスキャンし、session.gc_maxlifetime と同じように、現在の時刻から
session の最終変更時刻を減算することです。
パラメータを比較して、生存時間が gc_maxlifetime
(デフォルトは 24 分) を超える場合、セッションは削除されます。
有効なリクエストが発生すると、PHP はグローバル変数 session.gc_probability
および session.gc_divisor
の値に基づいて GC を有効にするかどうかを決定します。この場合、
session.gc_probability = 1 session.gc_divisor = 100
つまり、GC が開始される可能性は 1% です (つまり、100 リクエストのうち 1 つのリクエストで GC が開始されるのは 100 リクエストのうち 1 つだけです)。
ただし、Web サーバーに複数のサイトがある場合、複数のサイトでセッションを処理すると GC で予期しない結果が生じる可能性があります。その理由は、GC が動作している場合、異なるサイトのセッションが区別されないためです。
では、この時点でそれを解決するにはどうすればよいでしょうか?
1. session.save_path
を変更するか、session_save_path()
を使用して、各サイトの session
を専用のディレクトリに保存します。 ;
2. GC の起動速度を上げます。GC の起動速度が上がると、それに応じてシステムのパフォーマンスが低下します。お勧めできません。;
3. 現在の # を決定します。コード内の ##session。 の生存時間、
session_destroy()delete;
session.gc_probability = 1 session.gc_divisor = 100 session.gc_maxlifetime = 1440
session.gc_probability と
session.gc_divisor は、セッション クリーニングを実行する確率を構成します。理論的な説明は、サーバーが定期的に gc 関数を呼び出す一定の確率があるということです。セッションをクリーンアップします。クリーンアップの確率は次のとおりです:
gc_probability/gc_divisor たとえば:
1/100 は、新しいセッションが初期化されるたびに
ガベージ コレクション プログラムが開始され、クリーンアップされる確率。標準は、session.gc_maxlifetime
で定義された時間です。
と session.gc_probability
は、各セッションの初期化時に開始される gc (ガベージ コレクション ガベージ コレクション)
プロセスを一緒に定義します。 . 確率。 この確率は、
を使用して計算されます。たとえば、1/100 は、各リクエストで gc プロセスが開始される確率が 1%
であることを意味します。 session.gc_divisor
デフォルトは 100
です。 例:
session.gc_maxlifetime = 60 session.gc_divisor = 1000 session.gc_probability = 1
は、1,000 人のユーザーが
session_start() を呼び出すたびに、ガベージ コレクション メカニズムが 100% 実行され、ガベージ コレクション メカニズムは不要なセッションファイルを削除してください。 注: 一般に、一部の大規模ポータルでは、オーバーヘッドを削減するために
を増やすことをお勧めします。次に、構成のみで行う方法を例を通して説明します。 gc (ガベージコレクション) プロセスを呼び出すことはできますか?
php.ini ファイルを設定することで、次の情報を変更します。
session.gc_maxlifetime = 60//当session文件在60s后还没有被访问的话,则该session文件将会被视为“垃圾文件”,并且等待gc(垃圾回收)进程的调用的时候被清理掉 session.gc_probability = 1000
gc プロセスが呼び出される確率は
gc_probability/gc_divisor を通じて計算されるため、ここではsession.gc_probability
を 1000
に変更し、session.gc_divisor もデフォルトでは 1000
です。 gc プロセスは、session_start() 関数が実行されるたびに呼び出されます。 3 つのセッションが開かれると、対応する 3 つの
ファイルが作成されます。各ファイルが 60 秒以内に呼び出されないと、「ジャンク ファイル」とみなされます。プロセスが呼び出されると、php.ini
構成ファイルを変更して gc が呼び出される確率を 100% に変更したため、「ジャンク ファイル」は unlink
になります。次に、ブラウザを使用してページを更新すると、3 つの session
ファイルのうち 1 つだけが残るはずです。<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">session.save_handler = files</pre><div class="contentsignin">ログイン後にコピー</div></div>デフォルトはファイルで、サーバー側の保存方法でセッションを定義します。 , file<p> は、<code>session
を一時ファイルに保存することを意味します。他の保存方法 (データベースの使用など) をカスタマイズしたい場合は、この項目を保存する必要があります。 に設定します。ユーザー###。
関連する推奨事項: 「
PHP チュートリアル
以上がPHPセッションのガベージコレクションメカニズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。