• ベストアンサー

SESSION情報は、ブラウザを起動したまま放置するとどのくらいで消え

SESSION情報は、ブラウザを起動したまま放置するとどのくらいで消えますか? 例えばAの画面(PHP+Smarty)からBの画面(PHP+Smarty)に移動する際にあるSESSION情報を参照する場合のタイムアウトが発生した場合の動作確認を行いたいと思っています。 パソコンでブラウザを起動して、Aの画面にアクセスしたまま放置した場合、どのくらい放置するとSESSION情報は消えるのでしょうか? それともブラウザを起動したままの場合、一生消えないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

回答番号:No.2の者です。 いつかは切れる、はずです。 実際に放置する実験をしたことはないですが。 PHPセッションのおおまかな仕組みは次の通りです。 (1)A君のためにセッションを張り、放置されたまま24分経った。 (2)Bさんのためにセッションを張った。このとき1/100の確率でA君のセッションを切る。 (3)もし(2)で生き残ってもCさん、D君などのセッションを張る度にA君のセッションは切る候補に挙げられる。そうこうしているうちにいつかはA君のセッションは切れる。 うーん、そういう訳でA君の後に続く人が誰もいなければもしかしてセッションは永遠に切れないかも。 通常のWebサイトでは考えられない状況なので私は気にしませんが。

その他の回答 (2)

回答No.2

通常は(=デフォルト設定のままでは)、 セッションは最低でも24分は維持されるようになっています。 24分過ぎたセッションは、PHP独自の方式によってランダムに切れていきます。 例えばA君のセッションは24分で切れたのに、Bさんのセッションは結構長生きしたりします。 ランダムなので予想は難しいです。 繰り返しになりますが、A君、Bさん両方に共通なのは、最低でも24分は維持される、ということです。 この仕組みをカスタマイズすることは可能です。ちょっと勉強が必要です。

yamada009
質問者

お礼

ありがとうございます。 つまりは、ブラウザを接続したままでも SESSION 情報は消えることがあるということですね。

回答No.1

SESSIONの有効期限はいくつかありますが、 「ini_set('session.gc_maxlifetime', 秒数);」といった指定をします。 さらに、この秒数がたって且つ、ある一定の確率で削除するロジックが走るようになっているので その確率を「ini_set('session.gc_divisor', 1);」としてやると100%の確率で削除されます。

yamada009
質問者

お礼

回答ありがとうございます。 参考になりました。 ただ、SESSION 情報を削除する方法ではなく、ブラウザを起動したまま放置した場合、いつかは SESSION情報が消えることがあるのかが知りたいのですが・・・

関連するQ&A