• ベストアンサー

セッションが切れないのは何故?

画面にログインして操作中、セッションが切れた場合にまたログイン画面を表示するという処理のテストをしています。 タイムアウトまでの時間が24分となっていたので、画面にログインした状態でPCに触らず放置していました。 30分程度放置した後に次の処理に移るためのsubmitボタンをクリックしたところ、セッションは切れず処理が続行されてしまいました。 何故セッションは切れなかったのでしょうか? タイムアウトさせるには何か特別な処理を行わなければいけないのでしょうか? アドバイスをお願いいたします。

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

  • ベストアンサー
  • kalze
  • ベストアンサー率47% (522/1092)
回答No.2

通常のPHPのセッション管理の場合で話しをします。 専用の処理を作られているのであれば話は変わってきますので、その場合は外の人間に聞いても無駄になります。 PHPのセッション管理をURL埋め込みでやっているのであれば、クライアント側(つまりブラウザ)にはセッションの有効期限はわかりません。 cookieであれば、ブラウザがcookieの有効期限みてセッション情報送らなくなれば新規にセッションを張ることになるとおもいますが。 セッションの管理はPHP側でやっています。 PHPでセッション情報の管理は、ノーマルだとファイルに保存してあります。 それ以外にもSQL系のDBを使用することがあります。 セッション情報ファイルは、何もしなければ削除されません。 ではどうやって削除されるかというと、PHPが動作したときに、PHP.iniに設定されている確率でガーベッジ・コレクションが稼動し、ガーベッジ・コレクションが有効期限のきれているものを削除します。 質問者さんのシステムがセッションをどのように実装しているのかわからないので、一般論になりますが。 テストするシステムに質問者さんしかアクセスしていない状態であれば、質問者さんが放置している限りガーベッジ・コレクションは動かないのでは? まぁあまり詳しくないのでまったく的外れなことを言っているかもしれませんが。

kamay
質問者

お礼

試しにセッションが切れた頃を見計らって他PCでサイトにアクセスしまくったところ、セッションが破棄されたことが確認できました。 ただ待ってるだけじゃ駄目なんですね… 本当に助かりました。ありがとうございます^^

その他の回答 (1)

  • kalze
  • ベストアンサー率47% (522/1092)
回答No.1

セッション管理をとりあえずcookieで行っていると仮定して。 1)cookieに有効期限が設定されていない 2)ガーベッジ・コレクションが呼ばれる操作をサーバに対して行っていない とかいろいろ考えられる気がする

kamay
質問者

お礼

ありがとうございます。 セッション管理はcookieではなくサーバー上で管理しているらしいです。 時間になったらサーバーが勝手に破棄するらしいのですが、 続いてしまうという事は破棄されてないという事ですよね?

kamay
質問者

補足

調べてみたところ、サーバー上というかURL埋め込み?みたいです。 色々なサイトを見ましたが、解決方法が未だにわかりません…

関連するQ&A