2010-12-10 92 views
12

會話結束或到期時註銷用戶的最佳方式是什麼?如何在會話超時或結束時註銷用戶

感謝您的任何幫助。

+1

您的意思是簡單地讓一個用戶成爲未經過身份驗證的用戶,或者實際上將用戶重定向到某些「嘿,你已經超時了!」他們等了很長時間並且他們的會話已經過期之後的頁面? – Pandincus 2010-12-10 22:48:41

+0

兩者如果可能? – zSynopsis 2010-12-10 23:14:25

+0

當會話結束時,他們所做的下一個請求將是未驗證的。在這種情況下,您的頁面可以在加載新頁面時檢查該頁面。要重定向它們,如果它們在同一頁面上的時間太長,則需要將JavaScript寫入具有等於會話超時值的倒數計時器的頁面。當計時器達到零重定向時,因爲會話無效。 (有點 - 有一點需要注意的是,如果他們在另一個選項卡中瀏覽您的網站 - 這將使會話保持活躍狀態​​,而第一個標籤javascript仍會倒數) – Prescott 2010-12-11 03:13:41

回答

11

這真的取決於你在尋找所需的功能。我假設你正在使用FormsAuthentication。

有你需要關注的兩個獨立的東西:會議FormsAuthentication餅乾。除非我錯了,否則這兩者都有單獨的超時。

如果您遇到的問題是,會話超時,但用戶仍然通過驗證,你可以嘗試以下的組合:

1:確保身份驗證Cookie具有相同的超時值作爲會話:

<authentication mode="Forms"><forms ... timeout="20" ... ><authentication> 
<sessionState ... timeout="20" ... /> 

2:在你的Page_Load事件中,檢查是否會話超時:

if (context.Session != null && Context.Session.IsNewSession == true && 
    Page.Request.Headers["Cookie"] != null && 
    Page.Request.Headers["Cookie"].IndexOf("ASP.NET_SessionId") >= 0) 
{ 
    // session has timed out, log out the user 
    if (Page.Request.IsAuthenticated) 
    { 
     FormsAuthentication.SignOut(); 
    } 
    // redirect to timeout page 
    Page.Response.Redirect("/Timeout.aspx"); 
} 

(見http://www.eggheadcafe.com/articles/20051228.asp以獲取關於檢測會話超時的信息)

如果您想要更愉快的用戶體驗,可以使用javascript在X分鐘後啓動某種模式UI彈出窗口。這個彈出窗口只允許用戶啓動一個按鈕點擊,這將觸發服務器上的AJAX回發,從而擴展其身份驗證和會話cookie,而不必重新加載頁面。我從來沒有實現過,但看看, this guy made an ASP.NET AJAX control

+0

Thanks Pandincus – zSynopsis 2010-12-13 23:32:02