• 締切済み

Session_OnEndイベントスクリプトが処理されない。。。

いつもお世話になってます。 今、ログイン数のカウンタ表示をしようとしているのですが、 global.asaの Session_OnStart内でログインカウンタをインクリメント。 Session_OnEnd内でログインカウンタをデクリメントしてます。 ところが、ログインした時は正常にインクリメントされているのですが ログアウトしてもデクリメントされません。 (単なる来訪者カウンタになってます。。。) 閉じるボタンやSession.AbandonをきっかけにSession_OnEndイベントを処理するものだと思っていたのですがうまくいきません。 どなたか良い方法を教えていただけないでしょうか。 よろしくお願いします。

みんなの回答

  • maro
  • ベストアンサー率47% (95/199)
回答No.1

Session_OnEnd内でエラーは起きていませんか? イベントログに何か残っていませんか? Session_OnEndは明示的にSession.Abandonするかタイムアウトしないと呼び出されません。 ブラウザを閉じただけではサーバー側に何も通知されないので、呼び出されないと思います。

sasakid
質問者

お礼

maroさん、 回答ありがとうございます! 質問を投稿した後いろいろ調べて実験していたのですが、 ご指摘どおりSession_OnEnd内でエラーが起きてました。 (※Requestオブジェクトを使用してました) そしてSession_OnEndを呼び出すために、Session.Abandonを使用することにします! どうもありがとうございました。

関連するQ&A

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

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

  • 思うように セッションの破棄 ができない

    ASPを使ったログイン機能を持ったページを作っています。 ログインしたときにセッションIDを使って直リンクを避けるような 機能を持たせたのですが、サーバーの負荷を避けるために、ログアウト ボタンを作って ログアウトボタンを押したらセッション情報を破棄 するようにしたら、どうもページを読み込んだときに すぐに破棄してしているようで うまくできません ソースは <%@ Language = "VBScript" %> 以下HTMLヘッダー類 <script language="JavaScript"> <!-- function owari(){ <% Session.Abandon %>//セッション破棄 parent.location.replace('../login/login.asp?stn=2');//ページ移動 } //--> </script> 以下HTMLのボディー <INPUT type="button" value="ログアウト" onclick="owari()"> 以下色々なソース ボタンを押したら JavaScriptを呼び出し 破棄してページ移動するように作ったのですが これ自体は問題なく作動するのですが、 <% Session.Abandon %>//セッション破棄 がはいると、なぜかページを開いたときに 呼び出してもいないのに 破棄されてしまっているようで、通常のページ移動もできなくなります セッション破棄の1行を抜くと 全てきちんと作動しますが これではサーバーのセッションタイムアウトまでメモリが残るから良くないのです。 また、VBScript内に Sub haki() Session.Abandon .. .. End sub として <script language="JavaScript"> <!-- function owari(){ <% haki %> } //--> </script> と言うようにしても、同じ不具合になります JavaScriptはfunctionにすると呼び出されるまでは実行されないと思います。 またVBScriptのSubプロシージャも呼ばれるまでは実行しないと思っています。 ただ、今の状態を見る限り、このあたりの認識が間違っているのかなと思っているのですが、 根本的な原因とその解決策が分からず困っています。 どなたかご教授くださいますと幸いです。 よろしくお願いします

  • ログアウト処理

    <?php if(isset($_SESSION["sdata"])) { print "ようこそ".$_SESSION["sdata"]."さん"; print "<INPUT type=\"button\" value=\"ログアウト\" onClick=\"location.href='自分自身'\">"; unset ($_SESSION["sdata"]); } else { print "ようこそゲストさん"; print "<INPUT type=\"button\" value=\"ログイン\" onClick=\"location.href='ログイン画面'\">"; exit; } ログイン画面で認証できたら、$_SESSION["sdata"]=ユーザー名 として、他の画面では上のような処理をしようかと思ったのですがこれではブラウザの更新ボタンを押してもログアウト扱いになってしまうことに気づきました。 onClick=\"unset ($_SESSION["sdata"]);\" にしたらいけるかと思ったのですが、エラーになってしまいました。ログアウトボタンを押したらセッション変数を削除したいのですが、どうしたらいいでしょうか? それと、ログイン処理はクッキーとかも使ったほうがいいのでしょうか?

    • 締切済み
    • 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
  • ASP VBS global.asa Session_OnStart内

    ASP VBS global.asa Session_OnStart内でサーバーの環境変数取得 教えてください。global.asa内で環境変数って取得できるのでしょうか? 今までglobal.asaファイル内で直接書いていた文言を、環境変数から取得する、 というプログラム修正をしなければならなくなりました。 まず、VBSファイルを作成して、環境変数を取得することはできました。 その内容でそのままglobal.asaに記述すると、おそらく、環境変数が正しく取得できません。 このおそらくというのは、エラーが表示されないのです。 ただ、取得できていないので、その後の処理でエラーとなります。 環境は、 IIS 6 Windows2003server です。 いろいろ調べているのですが、いい回答が見つからず。 そもそも、global.asa内で環境変数を取得できるのかも分からず。 お願いします。

  • [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
  • セッションが切れないのは何故?

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

    • ベストアンサー
    • 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
  • セッション無効できない。Servlet/JSP

    失礼します。 JavaでServlet/JSPでWebアプリを作っているのですが、 ログアウト処理(セッションの無効化)で困っています。 sessionを操作するSessionOperatorクラスでログアウト処理を実装しています。 SessionOperator sp = new SessionOperator(request,response); sp.logout(); /* ログアウトメソッド */ public void(){ session.invalidate(); } このようにセッションを無効化にしようとしているのですが、その後アカウントページのURLを直接入力でアクセスするとログインしている状態になってしまいます。 ログアウト後、直接入力でアクセスするとエラー画面を表示させたいです。 セッションはちゃんと無効化するにはどうすれば良いですか? セッションの無効化をSessionOperatorクラスで実行すると無効化できないんでしょうか。 どなたか教えてください。

    • ベストアンサー
    • Java
  • Perlでのセッション管理と不要セッション削除について

    いつもお世話になっています。 Perlにてセッション管理(ログインして、サイト内はユーザーIDなどを持ちまわるような)を行おうとしています。 CGI::Sessionを使用して実現できると思っているのですが、 疑問があります。 セッション情報の持ち方は、サーバー内にファイルか、DBに格納する ことになると思いますが、不要になったファイルやレコードは、 みなさんどうされているのでしょうか? (ログアウトボタンがあっても、ブラウザの閉じるボタンを押される ケースが多いと思いますので、必ずdelete()はできないですよね?) 削除バッチなどで定期的に削除することを考えていますが、 もっとスマートなやり方があればご教示いただければと思います。 よろしくおねがいします。

専門家に質問してみよう