[PHP-users 1226] Re: セッションの保存期間

KOYAMA Tetsuji php-users@php.gr.jp
Fri, 17 Aug 2001 17:45:24 +0900


  小山です。

At Fri, 17 Aug 2001 13:20:05 +0900,
Masayuki Tadano wrote:
> これらのファイルを一定時間過ぎたときには削除してくれるための
> 設定はないのでしょうか。

  某雑誌記事に書いた原稿から抜粋。:-)

# 8/24 発売らしいです。

** GCの役割

  セッション情報を明示的に session_destroy() で削除すれば問題ありませ
んが、そうでない場合はサーバ側にセッション情報がどんどん溜まっていくこ
とになります。最初に説明したように、HTTP ではクライアントがいつアクセ
スを止めたのか知ることはほぼ不可能ですので、ある意味サーバ側に古いセッ
ション情報が溜まるのは避けられないことでもあります。

  そこで GC (ガーベッジ・コレクション=ごみ拾い) の出番です。GC はある
法則ですでに使われなくなったセッション情報を見つけ出し、それを削除しま
す。この見つけ出すやり方は、最後にセッションが利用された時間から指定秒
数が経過したものを、すでに使われなくなった情報だとみなします。経過秒数
は php.ini の session.gc_maxlifetime で指定します。

  GC が実行されるタイミングは、クライアントからリクエストが来たときで
す。PHP は通常 httpd から起動されるものですから、それ以外のタイミング
はありえません。しかしアクセスのたびに GC が実行されるのは無駄なので、
php.ini の session_gc_probability で、実行する確率を指定できるようになっ
ています。デフォルトは 1% で、つまり 100 回のリクエストにつき 1 回の割
合で GC が実行される設定になっています。古いセッション情報が残っていて
もあまり不利益はありませんが、もし気になるならサーバが受けるリクエスト
数に合わせて、GC の実行確率を高くしてみると良いでしょう。

-- 
	小山 哲志@ビート・クラフト
	koyama@beatcraft.com
	koyama@hoge.org