• ベストアンサー

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

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

  • kamay
  • お礼率73% (361/491)
  • PHP
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • 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

  • Sessionがnullになりません。

    下記の環境でWebアプリケーションを開発しています。 java 1.5 eclipse 3.3 tomcat 5.5 ある画面Aは検索ボタンを押して結果一覧を表示したり、 結果一覧の詳細を知るためにリンクを押して、ポップアップ画面Bを表示したりします。 web.xmlに <session-timeout>10</session-timeout> と記述し、10分でタイムアウトとしています。 Servlet処理の最初で request.getSession(false) によりセッションを取得し、nullであればタイムアウト画面に遷移させています。 結果一覧を表示した後、10分間何もせずに画面Bを表示しようとすると ポップアップの画面はタイムアウト画面で表示されます。 Servletにブレークポイントをつけて確認したところ このときのrequest.getSession(false)の結果はnullでした。 タイムアウト画面を×ボタンで閉じ、A画面内で検索ボタンを押したところ、 request.getSession(false)の結果はnullではありませんでした。 ただし、session内にsetAttributeしていたBeanが全てnullになっており、 その後の処理で例外が発生してしまいました。 なぜ検索ボタンを押したところで sessionがnullになっていないのでしょうか?

    • ベストアンサー
    • Java
  • docomoのセッションが切れてしまうのは?

    携帯サイト用のセッションでdocomoの時だけ思うように フォームによるページ遷移ができません。 色々試してみたのですが、サッパリです。 どなたかお知恵をお貸し下さい。 例) -- page01.php -- session_name( "test" ); session_start(); session_regenerate_id(true); $test = session_name()."=".session_id(); if ( ( $smp01 = auth() ) == FALSE ) { header( "Location: ./test.php?redirect=index_test.php?" ); exit; }←ログイン時の処理(ユーザー定義関数にて) ・        ・        ・        ・ <form action="page02.php?<?= $test ?>" method="get" /> 入力:<input name="test01" type="text" value="" /> <input name="smp02" type="submit" value="next" > </form> ↑入力させてpage02.phpにて処理 上記のようにしているのですが、 submitするとログイン時の処理に掛かってセッションが切れてしまい ログインページに戻ってしまいます。 ログイン時の処理を削除するとpage02.phpへと遷移します。 ログイン時の処理を残したままセッションが切れずにフォームによる ページ遷移ができるようにするにはどのようにすれば良いのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • tomcatのセッションタイムアウト

    tomcatで構築されたWebアプリを検証しています。 Webアプリにログインし、何も操作せずにセッションタイムアウト時間の確認をしているのですが、 tomcatのセッションタイムアウトの設定値通りにセッションが切れません。 web.xmlの設定値は5分を設定しています。 大抵は設定時間+1分程で切れるのですが、 設定時間+3分ほど待ってみてもセッションが切れないケースがあり、原因がわからない状況です。 利用しているtomcatのバージョンは4.1.31です。 何かtomcatの仕様上でセッションタイムアウトの時間が変わるようなことがあるのでしょうか? 当方初心者のため、お手柔らかにお願いいたします。

  • 共通関数でセッションのタイムアウトを指定する方法

    phpを始めたばかりなので 根本的な考え方から間違ってるかもしれませんが、 その時はご指摘下さい。 やりたい事は、セッションのタイムアウトの指定です。 ログインしてから1時間後にタイムアウトを促すように 作りたいのですが、なかなか上手くいきません。 まず、ログイン画面のphpファイルが存在します。 ここでログインするとトップページの phpファイルへ飛びます。 トップページでは、 includeで前頁に共通する関数が詰まったphpファイルを取り込み、 それぞれのページで様々な処理を行います。 このincludeするphpファイルにセッションの タイムアウトを行う命令を入れようと思っています。 そうすれば、前頁でこのファイルをincludeするだけで 1時間後にセッションが切れる、という仕組みが できると考えているのですが、できないのであれば、 ご指摘下さい。 ちなみにその共通phpファイルに入れてみた命令は以下です。 session_cache_expire(分数) 又は… session_cache_limiter('private'); session_cache_expire (5); あまりコードの意味はわかっていませんが、 この方法で何故できないのでしょうか? 一応、このやり方でできなかったので 各ページ単体にも同じコードを入れてテストしましたが、 セッションが切れる事はありませんでした。 何かアドバイスをお願いします。

    • 締切済み
    • PHP
  • ?セッションタイムアウトしました?と出て予約できません。。

    ?セッションタイムアウトしました?と出て予約できません。。 ローソンチケット予約をしようと思ってそのサイトへ行って先着販売を押したら ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ セッションタイムアウトしました。 セキュリティ保護のため一定時間操作がない場合操作が続行出来なくなります。 お手数ですが、再度トップページより操作を行ってください ‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥‥ と出て予約できないのですが、どういう事でしょうか。。 何回やってもセッションタイムアウトしましたと出ます・・ あと↓な事がかいてあったんですけど関係あるんでしょうか・・? 【サイト利用上のご注意】 SSL暗号強度128bit以上のブラウザでお使いください。 詳細はブラウザのヘルプをご参照ください。 ブラウザをすべて閉じて再度試してみてもダメでした・・;; もしかしたらチケットとれないかもしれないと思うとすごく不安です。。 回答お待ちしています

  • セッションタイムアウトの原因

    朝日新聞のアスパラクラブの会員に登録したのですが、何度ログインしても「セッションタイムアウト一定時間操作がありませんでしたので、安全のために接続を切りました。ログインし直してください。」と出てログインが出来ません。ログインはHPが表示されてすぐしているので一定時間操作がないというのはおかしいのですが・・。何か原因があるのでしょうか?

  • F5でリロードしないとセッションがきれない

    ログイン画面を作成しており、ログイン画面を表示した時点でセッションを値なしにしています。 各処理画面にはglobal.asaにおいてセッション値の有無を確認し値なしの場合にはログイン画面にリダイレクトするようにしています。 またメニューバーにログアウトのハイパーリンクを設置しログイン画面を呼び出しています。 通常の処理ならば (1)ログイン画面→(2)各処理画面→(3)ログアウトといった感じで最終的にセッションを切り、(2)各処理画面に移動しようとしてもログインしない限りは処理画面に移動できません。 ブラウザをたちあげてから(1)(2)(3)の処理を動かす分には問題ありません。しかし、(3)ログアウト後に再度ログインしごちょごちょした後、(3)ログアウトしても(2)各処理画面に移動できてしまいます。これはセッションを切るロジックを通っていないようです。条件で通っていないとかではなく、何故か通っていないのです。何故でしょう?? ためしに既に画面を表示している状態で適当な文字をログイン画面のロジック内に記入し、ログアウトのハイパーリンクを押しても表示されません。F5キーを押した時のみ表示されます。※Ctrl+N で新規ウィンドウを表示してもでません。 よろしくお願いします。 最悪、解決できない場合はハイパーリンクを押した時にF5キーを押したようなイベントを使用したいのですが、もしこういう処理があるのなら教えてください。 よろしくお願いします。

  • httpセッション

    失礼致します。 セッションについてお聞きします。 httpsessionの受け渡しについてなのですが、画面jspページから ログイン名とパスワードを取得し、サーブレットに渡しています。 サーブレットの書き出しは次のようになっています。 public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { HttpSession session3 = req.getSession(true); ・・・ このあとsession3セッションにパスワードをセットし、 jspページでセッションチェックした後falseならログイン画面に リダイレクトします。ここまでは出来ました。 ところが、このログイン名を文字列操作したいと思い、 サーブレットからjspページにディスパッチする前に一旦 文字列操作用javaページで文字列操作をしようと思いました。 ところが、サーブレットでない純粋なjavaページではhttpsessionが使えないことが分かりました。 HttpSessionを型に解決できませんと言われます。 この問題は一度は直面したことのある方も多いのではないかと思い、質問させて頂きました。 このような場合、どのように対処されていますでしょうか?

  • PHP セッション情報のDBへの受け渡し

    お世話になります。 標題の件について、以下のとおり説明します。 (1)1ページ目:入力フォームで入力した情報をセッションに保持 (主にプルダウンメニューの情報とテキスト) submitボタンで次画面へ ↓ (2)2ページ目:サムネイル写真をクリックした情報を保持+インラインフレームで拡大写真表示 (クリックした情報をプルダウンメニューに表示してセッションへ保持) submitボタンで次画面へ ↓ (3)3ページ目:サムネイル写真をクリックした情報を保持+インラインフレームで拡大写真表示 (クリックした情報をプルダウンメニューに表示してセッションへ保持) submitボタンで次画面へ ↓ (4)4ページ目:上記内容の確認画面 submitボタンで次画面へ ↓ (5)送信 現状、上記の流れでセッション情報を保持しつつメールでの送信が確認出来ています。 ですが、ページ遷移で確認画面から前画面へ戻って、例えば2ページ目の写真を変更して、submitで次画面へ遷移すると、3ページ目の情報がなくなり新たに写真を選択する必要になってしまいます。 なので、ページを前後遷移しても情報が保持された状態にするには、どうすれば良いでしょうか? データベースを使わないと出来ないことでしょうか? データベースに関しても勉強しておりますが、セッション情報をDBへ登録して、その後ページを遷移した場合に、データベースから呼び出すようなイメージなのでしょうが、それにはどうすれば良いのかが不明です。 お手数ですが、ご教授の程、よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpでセッションの切れるタイミングについて

    page1.phpで $_SESSION["SESSION_1"] = "aaa"; 次画面 page2.phpで $_SESSION["SESSION_2"] = "bbb"; としたとします。 セッションがタイムアウトした場合、$_SESSION[]ごとすべて開放されているのか、 $_SESSION["SESSION_1"]と$_SESSION["SESSION_2"]は個別なのかどちらですか? えーと、何がしたいのかと言いますと、 複数セッションを定義したとして、 セッションが生きているかどうかは定義したセッションすべて調べないとわからないのか? どれか一つ調べればいいのか? それが知りたいです。

    • ベストアンサー
    • PHP

専門家に質問してみよう