[PHP-users 30492] Re: session_start()から先に進まない
donguri256 @ mac.com
donguri256 @ mac.com
2006年 10月 11日 (水) 11:46:20 JST
質問者のどんぐりです。松本様ご回答ありがとうございます。
> まず第一にsession_start()するスクリプトがなんらかの事情
> で長時間終了しな
> かった場合に、同一セッションIDでアクセスすると同様の症状
> が発生すると思
> います。
> この理由はsession_start()はセッションファイルを
> LOCK_EXでロックしますが、
> ロックが解除されるのはスクリプトの終了時だからです。
> この場合はapacheを再起動すれば一時的に症状が無くなると思
> いますが、根本的
> には長時間スクリプトが終了しない事が問題だと思います。
セッションを使っている場合の「スクリプトの終了」とは、具体的にど
んな状態を指しますでしょうか。
・スクリプトファイルを実行しきっており、セッションも明示的に
(session_destory()など)開放された状態
・ブラウザウィンドウを閉じるなど、実行が中断され、同時にセッショ
ンも暗黙的に開放された状態
私は上記2つだと思うのですが、どちらでもない状態(つまりス
クリプトが終了していない状態)が長期間続くというのは、別に特殊な
状況ではないような気がします。
セッションを開放(例えばログアウト)しないままブラウザも閉じず、
長期間後に使うことは私はよくあります。
するとそのサービスでは一定時間操作していなかったので再ログインを
要求してきたりしますが、本件のように先に進まないという状況になっ
た経験はありません。
松本様のご指摘は、言い換えると
セッションファイルがロックされた後、そのまま長期間利用しないこと
によりロック元のプロセス自身は存在しなくなり、再アクセスしたとき
は違うプロセスが、自分がロックしたものと違うセッションファイルを
開こうとしている問題、
と解釈してよろしいでしょうか。
仕様としては、ログインしっ放しにしておきたいのではなくて例えば
30分間操作しなかったら再ログイン要求などしたいので、
session.gc_probability = 100
session.gc_divisor = 100
session.gc_maxlifetime = 1800
などと必ず削除するようにすれば、関係のないセッションファイルを見
に行けないので解決するのでしょうか。
試してすぐ結果を確認できる現象ではないので、早速設定して少し待っ
てみます。
だとしても100%の確率でガベージコレクションとは聞いたことが
ないですが。。
ロックが原因だとすると、「アクセスしてずっと待ってるとたまに開け
る場合がある」のが気になります。
> 第二に、セッションファイルを設置するデバイスの可用性に問題があ
> る場合に
> このような症状になるかも知れません。例えば/tmpが
> NSFサーバーを利用して
> いて、NFSサーバーとの間に設置されているHUBが故障し
> ていて、アクセスしに
> くくなっている場合等です。
折角ご考慮いただきましたが、セッションファイルの読み書きディレク
トリはローカルホストにそのまま置いてあり、ご指摘のような問題はな
さそうです。
---
どんぐり
donguri256 @ mac.com
PHP-users メーリングリストの案内