[PHP-users 30069] Re: Windowsにおいてのセッションファイルの自動ガーベッジコレクションについて

goungoun gounx2 @ gmail.com
2006年 8月 18日 (金) 13:17:12 JST


こんにちは

私も同じようなことをやって「セッション切れない?」
と悩んだことがありました。

On 18 Aug 2006 01:34:37 +0900
araki-ml @ mail.goo.ne.jp wrote:
> php.iniの設定は以下のとおりです。
> 
> ----------------------------------------------------------------
> ;セッションファイル保存場所は1階層目を指定してあります。
> session.save_path = /tmp
> 
> ;とりあえずガーベッジコレクションタイミングを
> ;100%に設定してみましたがダメでした。
> session.gc_probability = 100
> session.gc_divisor     = 100
> 
> ;生存期間を30秒に設定してあります。
> session.gc_maxlifetime = 30
> ----------------------------------------------------------------

うろおぼえですが、いろいろ試行錯誤した結果
以下で納得しています。

セッションを2つ開いて(ブラウザを2つ立ち上げる)
片方を放置、もう片方のアクセスを繰り返していると
30秒過ぎたタイミングで、放置していた方のセッションが
破棄されると思います。

1セッションだけ開いて、アクセスを繰り返しても
gc動かなかったような気がします。
「phpスクリプトを実行した後にgcが動く」ようなので
1セッションしか存在しない場合、常にセッションデータ
ファイルが更新された後にgcが動くので、結果的に
「30秒経過したのにgcで削除されない?」と
感じてしまっていたと思います。

自分で勝手に納得してるだけで、ソースを読んだり、
ドキュメントに書いてあった情報ではありません。
はずしてたらすいません。

ps.
余談ですが、
明示的に「最終アクセスからxx分以上経過したら
*必ず*セッション破棄したい」
ということをやりたくって、gc周りの設定でできないかなぁ。
と調べていたことがあります。
結局「gcだけでは*必ず*は実現できないようなので、
セッションに最終アクセス日時を記録しておいて、
それも見る」しかないんだなぁ。と納得してます。


-- 
goungoun <gounx2 @ gmail.com>
http://goungoun.dip.jp/app/



PHP-users メーリングリストの案内