2009-09-09 4 views
3

現在、ASP.Net 3.5プロジェクトで作業中で、セッションタイムアウト検出を実装しようとしています。セッションCookieを有効にする方法を知っていますが、私は完全に失われていません。クッキーレスセッションを使用するとセッションタイムアウトを検出する方法

セッションタイムアウトが発生すると、ユーザーをカスタムページにリダイレクトする必要があります。

誰かが私にその方法を説明できますか?

私のクッキーベースのソリューションは、このようになりますし、私はその動作を再現するためにwan't:Global.asaxの中

if (Session.IsNewSession && (Request.Cookies["ASP.NET_SessionId"] != null)) 
    Response.Redirect("..."); 

答えて

2

私は解決策を見つけたようです。私はそれにはとても満足していませんが、現時点ではうまくいきます。

私はあなたにも、あなたのWebにこれを追加する必要が

public void Page_Load(object sender, EventArgs eventArgs) 
{ 
    if (Context.Session != null) { 
     if (Context.Session.IsNewSession) { 
      if (!string.IsNullOrEmpty(sessionID.Value)) { 
       Response.Redirect("~/Timeout.aspx") 
      } 
     } 
     sessionID.Value = Context.Session.SessionID; 
    } 
} 

私の分離コードに自分のページのマークアップ

<asp:HiddenField ID="sessionID" runat="server" /> 

と、次のコードに隠しフィールドを追加しました。configまたはASPは投稿されたフォームフィールドをすべて無視します。

<sessionState cookieless="true" regenerateExpiredSessionId="false"/> 

regenerateExpiredSessionIdは重要な属性です。

2

のSession_Endは常に使用されるセッションの種類にもかかわらず、解雇されなければなりません。

-edit:これはあなたの前のセッションがタイムアウトになってきたことができるかどうか、新しい要求についての情報を与えるようあなたも

Session.IsNewSession 

に興味があるかもしれません。

+0

私は知っていますが、Session_Endはクライアントにリダイレクトをプッシュすることを許可していません。しかし、ありがとう。その要件を私の質問に追加します。 – Cubicle

+2

Session_Endは、InProcセッションを使用している場合にのみ起動されます。これは、CookieなしでSqlまたはState Serverモードの使用を排除しないからです。 –

+0

私はSession.IsNewSessionを試しましたが、私はブランドの新しいセッションとタイムアウトしたセッションを区別しています。 – Cubicle

0

これはかなり同じように動作します - セッションサービスは、タイムスタンプにASP.NETは、URLでそのセッションIDの要求を受信するたびに更新されます。現在の時刻がタイムスタンプを超えて> nの場合、セッションは終了します。

セッションで何かを入れて、それがそれぞれの要求にがあるかどうかを確認した場合、それがない場合は、あなたが知っているセッションが(期限切れの一つまたは新規ユーザーを置き換える)新鮮です。

+0

私はIsNewSessionを使用しようとしました。これは、提案されたソリューションと同じである必要があります。私の問題は、私はこのように新しいセッションとタイムアウトしたセッションを区別できないということです。 – Cubicle

-1

あなたがSession_Endが気に入らない場合、あなたは非常に迅速かつ汚いソリューションを試すことができます。 Session["Foo"]の値をSession_Startに設定してglobal.asaxに設定し、ページ内でSession["Foo"]を確認してください。 nullの場合、セッションの有効期限が切れます。..

これはNikhil's Blogで提案されたソリューションの1つです。それを確認してください。

私はここに同様の質問にAnthonyWJones'答えの「データベース」のセクションを見てみたい
+0

あなたのセッションにFooが存在するかどうかを確認しているときにセッションが既に再初期化されているため、動作しません。 –

0

セッション開始イベントで

ASP.Net Session Timeout detection: Is Session.IsNewSession and SessionCookie detection the best way to do this?

は、次のことができるようにすべきですセッションIDの存在をデータベースでチェックする - 私は、URLにSessionIDを持つページをリクエストすると、それが私が使用するSessionIDであると仮定します。

ユーザーがあなたの旗の新しいインスタンスを保存することを確認するために、手動でログアウトするときに、明確な、これがダウンからDBを確認する必要があります。

関連する問題