簡體   English   中英

Global.asax.cs中的Session_End未使用表單身份驗證觸發

[英]Session_End in Global.asax.cs not firing using forms authentication

我有一個asp.net 4.0應用程序,使用表單身份驗證設置為45分鍾超時。 我想在會話過期時將用戶重定向到超時頁面。 誰能告訴我怎么做? 我正在運行.net 4.0。

web.config有:

<authentication mode="Forms">
  <forms name=".ASPXAUTH" loginUrl="~/Login.aspx"
    defaultUrl="~/Default.aspx" protection="All" timeout="45"
    requireSSL="false">
  </forms>
</authentication>

Global.asax.cs文件具有:

void Session_End(object sender, EventArgs e)
{
    Response.Redirect("~/Timeout.aspx");
}  

Session_End方法中無法進行重定向。 它不是由於請求而運行,因此它沒有Response對象,並且沒有響應任何地方的重定向。

由於會話過期,在瀏覽器中無法執行任何操作。 HTTP協議是面向請求的,因此在沒有瀏覽器要求的情況下,無法將消息從服​​務器推送到瀏覽器。

瀏覽器無法確定會話是否已過期。 如果您要輪詢服務器以檢查會話是否已過期,它將使會話保持活動狀態,從而違背超時的目的。

您可以使用客戶端腳本在45分鍾后進行重定向:

window.setTimeout(function() {
  window.location.href = '/Timeout.aspx';
}, 1000*45*60);

但是,這將使重定向僅基於此瀏覽器窗口上次聯系服務器以來的時間。 如果同一會話有多個瀏覽器窗口,則會話可能實際上沒有超時。

你的會話狀態是如何實現的? Session_End僅在使用InProc時有效。

http://www.eggheadcafe.com/articles/20021016.asp

在MVC上,您可以在_ViewStart.cshtml中添加此代碼

_ViewStart.cshtml:

@{
     Response.AddHeader("Refresh",Convert.ToString((Session.Timeout * 60) + 5));      

     if(Session.IsNewSession)  
         Response.Redirect(“Logout.aspx");// or another page which you want.
}

如何在會話結束時重定向

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM