web-dev-qa-db-ja.com

PHPセッションのガベージコレクションがどのように機能するかについての詳細を探しています

PHPには、ガベージコレクション(つまり、期限切れのセッションの削除)が発生する確率を制御するいくつかのセッション設定があります。

私の質問は、この確率は、特定のApacheサーバー上のすべての仮想ホストで実行されているすべてのApacheスレッドに適用されますか?

例えば:

  • 確率が1/100に設定されている場合、それはany PHPプロセスを実行するApacheスレッドがgcを実行している可能性のあるプロセスのプールに入るということですか?
  • または、特定のVirtualHostで実行されているスレッドにのみ適用されますか?または他の種類のパーティショニング?
  • 最後に、gcをトリガーするPHPプロセスの場合、すべてのPHPセッション?またはそのVirtualHostのセッションのみ?または他の種類のパーティショニングでgcを実行しますか? ?

特定のVirtualHost、サーバー全体、または何に対してgc_probability設定を調整する必要があるかどうかを判断しようとしています。

6
JDS

確率が1/100に設定されている場合、それはPHPプロセスを実行するApacheスレッドがgcを実行している可能性のあるプロセスのプールに入ることを意味しますか?

そのプロセスがセッション[session_start()]にアクセスする場合、はい、ガベージコレクションを実行する可能性があります。

異なるガベージコレクションとセッションを持つために異なる仮想ホストが必要な場合は、 session.save_path オプションを使用して、仮想ホストごとに異なるパスを設定する必要があります。これは、Apache仮想ホスト構成で `php_value session.save_path" /srv/www/www.example.org/sessions "のようなディレクティブを使用して行うことができます。異なるセッション要件で実行されている複数の異なるアプリケーションがある場合は、異なるパスとGCを設定する必要がある場合があります。

正直なところ、PHPセッションのガベージコレクションはそれほど優れていません。完全に無効にして、cronから起動したスクリプトを使用して、古いセッションを定期的にクリーンアップすることをお勧めします。または、サポートが必要な別の方法PHPアプリケーションでは、セッションをデータベースに保存します。

外部の関係者向けのものをホストしている場合は、ほぼ確実に、仮想ホストごとに個別のセッションディレクトリを設定する必要があります。

2
Zoredache