• ベストアンサー

セッションデータが残ってしまう

phpでログインページを作ってます。 「現在のログイン人数」を調べる方法として、ログインすると生成されるセッションデータの数でそれを表示しようと思ったのですが、ログアウト(またはウィンドウを閉じた)してもセッションデータが残ってしまいます。ログアウトならdestroyで消去するという手もありますが、ウィンドウを閉じた場合だとプログラムが働かないのでデータを消せません。 セッションデータが必要なくなったとき、それを削除するようにするにはどう設定したら良いのでしょうか?

  • PHP
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

セッション破棄時間設定は、php.iniの設定にあるけど session.gc_maxlifetime 「データが 'ごみ' とみなされ、消去されるまでの秒数を指定します。 ガベージコレクション (ごみの収集) は、 セッションの開始時に行われます。」(マニュアルから引用) 初期値のままなら 1440秒=24分 http://php.s3.to/man/ref.session.html

参考URL:
http://php.s3.to/man/ref.session.html

その他の回答 (1)

回答No.1

1)ログアウト ログインの時にセッションを生成しているのならば、ログアウト時に破棄(destory)するのが通常のやり方なんじゃないでしょうか。 2)ウィンドウを閉じた場合 これは諦めるしかないと思います。設定した時間が経てば、セッションは自動破棄されるわけですし。 どうしてもやるのならば、JavaScriptでウィンドウクローズの際に、サーバ側に閉じたことを通知する方法があります。でも、ユーザが複数のウィンドウを起動している際に、一つを閉じただけでログアウトしないようにするのは困難です。また、ユーザが強制的にブラウザのプロセスを落とした場合は、サーバ側に通知されません。 逆のアプローチとして、JavaScriptから、定期的(毎分など)にブラウザが「生きていること」をサーバに通知する方法があります。そのサイトのページを開いている全てのブラウザウィンドウが閉じられたり、ブラウザが落ちた場合には、「生きている」通知が来なくなるので、それでセッションを破棄します。 どちらにしろ面倒な方法です。

taku17
質問者

補足

回答ありがとうございます。 「設定した時間が経てば」とのことですが、その設定はどのようにするのでしょうか?その設定次第で解決できる気がするのですが・・・

関連するQ&A

  • [PHP]セッション破棄について

    はじめまして。 phpを始めて1週間の初心者です。 現在、ホームページでログイン処理とログアウト処理をphpのセッションを使って作成しています。 今回質問させて頂くのはログアウト処理についてです。 ログアウト処理をでセッションを破棄する際に http://oshiete1.goo.ne.jp/qa3224862.html を参考にして下記の処理を行わせています。 -------------------- logout01.php -------------------- <?php session_start(); $_SESSION = array(); if(isset($_COOKIE[session_name()])){setcookie(session_name(),'',time()-4200,'/');} session_destroy(); header("location: http://~トップページのURL~/"); ?> -------------------- 確認をしたところ、ログインしたユーザの情報は削除されているようでした。 また、http://oshiete1.goo.ne.jp/qa3224862.htmlを参考に下記のようなログアウト処理も行わせてみました。 -------------------- logout02.php -------------------- <?php session_start(); unset($_SESSION['access']); header("location: http://~トップページのURL~/"); ?> -------------------- 同じく確認したところ、ログインしたユーザ情報は削除されているようでした。 -------------------- 環境 -------------------- <サーバ> 【OS】 windows XP(テスト環境)、CentOS 5.2(公開環境) 【PHP】 5.2.6 【Apache】 2.2 <クライアント> 【OS】 windows XP 【ブラウザ】 Firefox 3.0.8 IE 7 -------------------- -------------------- 質問 -------------------- (1)logout01.phpとlogout02.phpの違いは何でしょうか。 (2)「unset($_SESSION);」は使用すると「$_SESSION」が使えなくなるとのことですが、  それはphpを再インストールしない限りは使えなくなるということでしょうか。  それとも、ブラウザを再起動すれば使えるという意味でしょうか。 (3)「unset($_SESSION);」と「unset($_SESSION['access']);」では何が違うのでしょうか。 (3)セッションを使用するとサーバ側にセッションIDを保存したファイルが保存され、  クッキーがクライアント側に保存されるとのことですが、logout01.phpとlogout02.phpを  実行した場合、サーバ側のセッションIDを保存したファイルとクライアント側のクッキーを  保存したファイルは削除されているのでしょうか。 (4)セッションの有効期限を指定していないため、logout01.phpとlogout02.phpを実行せずに  ブラウザを終了させた時もログインしたユーザ情報は削除されているようでしたが、  この場合もサーバ側のセッションIDを保存したファイルとクライアント側のクッキーを  保存したファイルは削除されているのでしょうか。 初歩的な質問で申し訳御座いませんがよろしくお願いします。

    • ベストアンサー
    • PHP
  • セッションの情報の消去について

    ログイン時にユーザ名をセッションを登録して、ログアウトのときにremoveAttributeでセッションから名前を消去したいのですが消えません。 ログイン時 String data = "USER NAME"; HttpSession session = request.getSession(); session.setAttribute("user",data); ログアウト時 session.removeAttribute("user"); strutsのexcuteメソッドに書いています。ログインとログアウト以外の処理は書いていません。 public ActionForward excute(ActionMapping map, ActionForm form, HttpServletRequest request, HttpServletResponse resonse) throws Exception { ここにログインとログアウトの処理を記述 } なぜ消えないのか悩んでいます。ご存知の方ご教授いだけないでしょうか。

    • ベストアンサー
    • Java
  • PHP 不要なセッションファイルの対応方法について

    セッションファイルの管理方法について、どなたかご教授願います。 現在セッションファイルを生成し、ログアウト処理時に、 session_destroy()関数を使用しています。 通常にログアウト処理が行われれば、良いのですがブラウザ事態を 閉じた場合、セッションファイルは残ったままになります。 PHPやApacheの設定などで簡単に管理できる方法は無いものでしょうか? なるべく、バッチやモジュールを追加しない形で進めていきたいと思っています。 以上です。

    • 締切済み
    • PHP
  • セッションについて

    なんとかセッションを使えるようになってきた程度のものですが ここにきてちょっとした事が気になり質問させて下さい。 ポータルサイトをつくっており会員登録,ログイン,登録情報変更など 複数のフォームが存在します。 例えば・・・ ログイン時のセッション $_SESSION['login_id'],$_SESSION['login_pass'] 会員登録時のセッション $_SESSION['touroku_id'],$_SESSION['touroku_pass']など10程度 会員登録情報変更時のセッション $_SESSION['henkou_name'],$_SESSION['henkou_mail']など10程度 ・・・のような感じです。 全てセッションで管理していることが問題なのかもしれませんが いろんなページ(フォーム)をまわる度に多数のセッションを持っている 状態となってしまいます。 現状は、それぞれのページで必要のないセッションについては1つづつ unsetで明記し消去しているのですが多数あるのでどうも手間に感じて しまいます。 session_destroyで一括消去できれば楽なのですがログインしている 場合に必須なセッションもありそれもできない状態です。 この場合皆様はどのように管理をしているのでしょうか? 調べてみたのですが有力な情報もみつからず今後の参考になればと思い 質問させて頂きました。宜しくお願いします。

    • ベストアンサー
    • PHP
  • phpのセッションについて質問です

    phpで会員制サイトの制作を勉強中です。 pdoでmysqlデータベースに接続しています。 セッションの「session_set_cookie_params」について質問ですが、 session_set_cookie_paramsで有効期限を設定する場合、 ログイン時にsession_set_cookie_paramsでセッションの有効期限を設定し、 他のページではsession_start()さえ記述すれば、 有効期限を過ぎると勝手にセッション変数のデータを空にしてくれるのでしょうか? それとも全てのページにsession_set_cookie_paramsを書かなければならないのでしょうか? プログラムを書いている上でセッションの動作がおかしい(有効期限が過ぎてもログアウトしない)のでsession_set_cookie_paramsの記述がおかしいのかと思い、質問しました。 また、セッション変数の有効期限を変数毎に個別に設定して削除する方法はないのでしょうか? ご回答、よろしくお願いします。

    • ベストアンサー
    • PHP
  • セッションについて

    php初心者&ど素人です 勉強のためにphpとmysqlで簡単なログイン機能を作ってみようと思いました しかし、Locationでページ移動したときのセッションがセキュリティ的に安全なのかわかりません ログインフォームのlogin.phpから自分自身に送信、ログインできたらセッションを付けてから header("Location:hoge.php");でhoge.phpに飛ばしています ログインした後のhoge.phpページではログイン確認をセッションidがあるかだけ確認しています セッションidがなかったらログインページ戻す if(!$_SESSION['id']){ header('Location: login.php'); exit(); } 質問1 セッションidは表示されている誰でも見れるidなのでセキュリティ的にまずいですか? 簡単にセッションのっとれるもんなんでしょうか? 質問2 一般的にはどうやているのでしょうか? ログインページ全て(例えば編集画面とか会員情報とか)にmysqlから暗号化されたパスワードを取得して、それをセクションに入れて、また、mysqlからパスワードと照合したりしてるんでしょうか? よろしくお願いします

    • ベストアンサー
    • PHP
  • PHP SESSION変数の削除について

    PHPでブラウザを×で閉じた場合、SESSION変数 の廃棄はどうすればよいのでしょうか? ガーペジコレクション(PHP.INI等の設定)に任せておけばよいのでしょうか? ちなみにログアウトの際は下記のプロシジャを実行しています。 ----------------------------- <?php session_start(); // セッション変数を全て解除する $_SESSION = array(); // セッションを切断するにはセッションクッキーも削除する。 // Note: セッション情報だけでなくセッションを破壊する。 if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } // 最終的に、セッションを破壊する session_destroy(); ?> -----------------------------

    • 締切済み
    • PHP
  • ログアウトする際にセッションファイルを削除したい

    PHPでWEBアプリケーションを作成しています。 携帯対応にするために、フォームを使用できないところは セッションIDをURLに付加しています。 ログアウト後(ユーザーがログアウトボタンをクリック)は、戻るボタンをクリックしても「ログインしていません」のエラーメッセージが表示されるようにしたいのです。 現在、ログアウトする際、すべてのセッション変数を削除しているのですが、ブラウザの戻るボタンをクリックすると、もとの画面が表示されます。 その画面にはセッションIDを埋め込んだリンクがあり、 クリックすると正常にリンク先に移動してしまいます。 セッションファイルが残っているために、セッションが継続されたような状態になってしまっているのではないかと思います。 セッションファイルを削除すれば、上記エラーメッセージが表示されるのです。 そこで、ログアウト時にセッションファイルを自動的に削除してしまいたいのですが、どのような方法をとればよいのでしょうか? やっぱり普通にセッションファイルの場所を取得して、削除するしかないのでしょうか? 教えてください。 以下、ログアウト時の処理です。 // セッションの初期化 session_start(); // セッション変数を全て解除する $_SESSION = array(); (session_id('')); // セッションを切断するにはセッションクッキーも削除する。 // Note: セッション情報だけでなくセッションを破壊する。 if (isset($_COOKIE[session_name()])) {   setcookie(session_name(), '', time()-42000, '/'); } // 最終的に、セッションを破壊する session_unset(); session_destroy();

    • 締切済み
    • PHP
  • 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
  • セッションを用いたデータの変更、反映

    お世話になります。 セッションを使用して会員管理システムを構築しているのですが、管理システムの中に ポイント計算システムを導入しています。 会員登録 ~ 商品の購入 ~ ポイントの加算・減算・利率等のコアな箇所のプログラムは 思い通りに走りました。 しかし、ポイントの加算・減算処理を行った場合、データベースには計算後の値が入るのですが、 セッションを使用しているため、一度ログアウト( セッションを破棄 )して再ログインをしないと 最新のデータ( ポイント )がブラウザへ反映されず悩んでいます。 セッションIDを書き換えれば何とかなるかもと思い、 session_regenerate_id(true); も設置してみましたが、挙動は変わりませんでした。 ( リンクをダブルクリックしまくるとセッションが切れるくらいです。 ) クライアントサイドのスクリプトが必要になるのでしょうか? PHPのみで解決できる方法がございましたらご教示いただきたく存じます。 ---------------- ■スペック PHP 5.1.6 MySQL 5.0.95 ----------------

    • ベストアンサー
    • PHP

専門家に質問してみよう