好きなおでんの具材ドラフト会議しましょう

サーバー側で20分間アクセスのなかったセッションを
強制的に切断したいと考えています。

まずphp_value session.gc_maxlifetime等に有効期限を設定して、
ガベージコレクションでセッションIDファイルを削除する方法ですが、
今回の要件としては、サーバー側で20分後に確実にセッションを
切りたいので、1/100の確率とかでは困ります。
そこで、php_value session.gc_divisorを1にして
1/1の確率でセッションIDファイルを削除させたりしても良いのでしょうか?
そもそもデフォルトで1/100の確率で削除としているのには1/1にしては
駄目な特別な理由があるのでしょうか?

それと、別案として、セッションIDをサーバー側のDBか何かに保持して、
セッションIDファイル(SESS_*)の最終更新日から20分を過ぎている
ファイルに対してunlinkで物理削除してしまう方法も検討しています。
この方法は何か問題あるでしょうか?

以上。宜しくお願いします。
 

A 回答 (1件)

セッションを確実に切りたいなら、


確実に切れるように自分で処理すれといいよ!

セッション(再)開始。

セッション変数から最終アクセス日時 LAST_ACCESS を取得。
無ければ、現在の日時を LAST_ACCESS に設定。

現在日時が、取得した LAST_ACCESS から 20分経過していたら、
全てのセッション変数を開放。
セッションを終了。
セッションファイルを削除。
セッションクッキーを削除。

セッションの期限が切れたことを知らせるページに遷移。


これをセットにして先頭で実行すればよさそうなきがする。。。


と思ったら、こんなページがあったよ!
http://pentan.info/php/session_gc.html
    • good
    • 0
この回答へのお礼

お教え頂いたサイトでは、確実にガベージコレクションを
実行させる為に1/1にしていましたね。
どうも1/100とかにする最大の理由は負荷による理由っぽそうですね。

とりあえず、ガベージコレクションを1/1にして、
その後(数分後)にガベージコレクションの消し忘れ(あり得ないかもしれませんが)
対策で、ご指摘の通り、最終アクセスからの判断で削除していく方法でやって
みようと思っています。

ご回答ありがとうございました。

お礼日時:2012/06/28 17:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報