2016-09-13 2 views
0

私はウェブサイトにログイン/ログアウト機能を実装しています。ユーザーがSign outボタンの上に(どこかが、ログインページ、Login.aspxで)クリックするたびに、以下の方法が実行されます:Response.Redirectの後にセッションタイムアウトを検出しますか?

protected void SignOut(object sender, EventArgs e) 
{ 
    Session.Abandon(); 
    Response.Redirect("Login.aspx"); 
} 

を今、リダイレクトが発生したとき、私はLogin.aspxで次の操作を行いたい:

protected void Page_Init(object sender, EventArgs e) 
{ 
    if (Session_has_timed_out ...) 
     SessionTimeOutDIV.Text = "Session timed out. Please log in again."; 
    else 
    { 
     // normal logic here ... 
    } 
} 

Q:はどのように私はSession.Abandon()への実際の呼び出し後にセッションが以前に私は(1)これをチェックする必要があることを考えると、終了したことを確認しないと、(2)私はSession.Abandon()への呼び出しが持っていたところからリダイレクトしていた後、起こりました?

+0

'Session.Abandon()'は 'session_end'イベントを発生させます。 Yoは何かをそこに置くことができます。また、放棄イベント後、すべてのセッション変数はnullになりますので、確認することができます。それはあなたが探しているものですか? –

+0

@Ravi A.正しく理解すれば、 'Session.Abandon()'はすべてのセッション変数を破壊します。技術的には、電話などの間に違いはありません。 'Session ['username']' ** **セッションが作成されて** ** **放棄される前に - どちらの場合も 'null'が返されます。これは問題です。なぜなら、 'Page_Init'で' Session ['username'] 'をチェックするだけで、ページが開始されるたびに条件は' true'に解決されるからです。セッションが**終了したとき(つまり、ユーザーがログアウトしたとき)はいつでも、それが真実である必要があります。 – Alex

答えて

1

はい、そのため、認証のためにcookieに頼ってformsAuthまたはASP.Net IDを使用することをお勧めします。それは私たちはTempDataを持っているMVCだった場合WebFormsのために私はそのようなことはないと思う。だから、これが唯一のハックですLogin.aspxの

if (Request.QueryString["LogOut"] != null && Request.QueryString["LogOut"] == "true") //do handle exception and casting 
    { 
     //SessionTimeOutDIV.Text = "Session timed out. Please log in again."; 
    } 
    else 
    { 
     // normal logic here ... 
    } 

のpage_initで

Response.Redirect("Login.aspx?Logout=true"); 

をクエリ文字列のような他の状態の管理技術を使用することができ、このことができます願っています。

+0

それは非常にスマートなアプローチです、私はそれが私の上にどのように浮かんでいないのだろうか?ありがとう! – Alex

関連する問題