- - PR -
ASP.NETにおけるTimerイベントについて
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-09-08 19:06
いつも勉強させていただいております。
今回、定期的にセッションクッキーの値を確認するASP.NET のページを作成することになり、下記のようなソースを 実行しました。 public void CreateTimer() { System.Timers.Timer aTimer = new System.Timers.Timer(); aTimer.Elapsed+=new ElapsedEventHandler(SessionCookie_Check); aTimer.Interval=5000; aTimer.Enabled=true; } public void SessionCookie_Check(object source, ElapsedEventArgs e) { try { Cookie_Check(); } catch(Exception ex) { string ErrorMsg= "Error :" + ex.Message + "Source:" + ex.Source; } } public void Cookie_Check() { HttpCookie ID_Cookie; HttpCookieCollection Cookie_Col; Cookie_Col=Request.Cookies; ID_Cookie=Cookie_Col["ID"]; } Page_LoadでCreateTimerを呼び出し、タイマー自体は この設定ですと5秒に一回SessionCookie_Checkを呼び 出すのですが、SessionCookie_Checkによって呼び出さ れるCookie_CheckにおけるRequest.Cookiesでエラーに なってしまいます。 エラー内容は 「このコンテキストでは要求が有効ではありません。」 となっております。 System.Timers.Timerのオブジェクト内では System.Web.UI.Pageオブジェクトの関数は使用できない のでしょうか? この方法以外でも結構ですので、timer関数を使用した 定期的なcookieのチェック方法をご存知の方いらっしゃい ましたら、よろしくご教授お願いします。 | ||||||||
|
投稿日時: 2004-09-08 19:33
サーバーサイドでTimerを使用しても意味がないのではないのでしょうか?
| ||||||||
|
投稿日時: 2004-09-09 08:27
burton999様 ご返答ありがとうございました。
全くその通りです。何を考えていたのか、お恥ずかしい限りです。 結局これを実現する為には、クライアントサイドでJavaScript等を 動かしてチェックするしかないのでしょうか? 何とかASP.NETでクライアントサイドのクッキー定期的にチェック する方法はないものでしょうか? | ||||||||
|
投稿日時: 2004-09-09 11:07
Cookieに保存されているセッションIDを確認したいということでしょうか?
それでしたら、ページにLabelコントロールを置いてPage_Loadで
とします。(試したのがVB.NETでしたのでC#に読み替えてください) 後は、リロードさせるクライアントスクリプトを用意するだけです。 面倒だったので、以下のようにHTMLソースに直接書いて試しましたが、他にも方法はあると思います。(リロードさせる間隔をセッションタイムアウトより長くしないと、同じ値を表示し続けるだけで意味がありません)
ただ気になるのは、これに何の意味があるのか?ということです。 何か目的と手段が噛み合っていないような気がするのですが、何を行いたいのでしょうか? | ||||||||
|
投稿日時: 2004-09-09 11:33
Ten.さん書き込みありがとうございます。
目的は二重ログインの防止処理を作成することです。 Aがログインすると、DBにAがアクセスした時間をもとに 作成したHASH値を書き込み、その値をセッションクッキーで 保持します。 同じIDを持ったBがログインするとDB上のHASH値が変わります。 そうするとAが保持しているHASH値とDB上のHASH値が異なる為 Aに対し何らかのエラー処理を行います。 この為に、Aのセッションクッキーを定期的に取得し、その値 をDB上の値と比較する処理を行いたいのです。 自分もJavaScriptのreloadで行っていますが、できればブラウザ のreloadが行われない方法が無いでしょうか? よろしくご教授お願いします。 | ||||||||
|
投稿日時: 2004-09-09 12:28
代案ですが…
ログイン時の情報(UserID、ログイン時刻)をDBに格納して、ログイン時にそのユーザが既にログインしているかどうかをチェックするような仕組みにしてはいかかでしょうか? (異常終了でDBにUserIDが残る可能性もありますが、その場合は、ログイン時刻で判断します。) [ メッセージ編集済み 編集者: ZEBRA 編集日時 2004-09-09 12:34 ] | ||||||||
|
投稿日時: 2004-09-09 13:16
ZEBRA様ご返答ありがとうございます。
この辺は要件定義で詰めたところですが、まさに異常終了時の処理で 問題になりまして、結局正規のユーザーの再ログインか悪意のユーザ の二重ログインかの判断がログイン時刻ではできないという結論に なりましてこの方法になりました。 | ||||||||
|
投稿日時: 2004-09-09 13:52
ApplicationオブジェクトにIDを埋め込むのは
いかがでしょう。 Session開始時 Session["ID"] = "123"; Application[Session["ID"].ToString()] = Session["ID"]; Session終了時 Application.Remove(Session["ID"].ToString()); 2重ログインの監視は。ログイン時に Application[Session["ID"].ToString()] があるかどうかをチェックする。 #話の内容を理解しきれてるかな・・・私。 |
1|2|3
次のページへ»