2013-09-23 60 views
1

確定日期&何時ASP.NET會話在使用窗體身份驗證時將過期?確定ASP.NET窗體身份驗證何時會過期

我想在用戶的會話即將到期時提醒用戶。沒有會話狀態&滑動到期被禁用。下面是一些System.Web程序設置:

<authentication mode="Forms"> 
    <forms defaultUrl="Default.aspx" loginUrl="Login.aspx" requireSSL="false" enableCrossAppRedirects="true" cookieless="AutoDetect" timeout="2" slidingExpiration="false"/> 
</authentication> 

<sessionState mode="Off"/> 

超時/會話的一生很容易的決定,但如果用戶刷新會話窗口內的頁面,增加壽命值的日期,時間在重新加載將不準確。

使用帶有加密作爲其值的FormsAuthenticationTicket票證的驗證cookie,可以解密它以獲取到期日期時間。

儘管可能會進行一些AJAX調用,但用戶可能會與UI進行交互,而無需發回任何迴應或向Web服務器發送請求。

有關如何在不使用cookie的情況下實現此類行爲的任何想法?

+0

您使用Cookie嗎?什麼類型的餅乾? –

+0

是的,我正在使用包含加密用戶數據的cookie。我沒有設置任何到期值。 – Raybiez

+0

在這種情況下,我認爲默認情況下,瀏覽器處於閒置狀態時會處於30分鐘不活動狀態,當您關閉瀏覽器時它們將會過期。 –

回答

2

我有類似的問題。在我的情況下,由於用戶數量較少,我們希望通過在頁面上進行輪詢ajax調用來獲得更好的用戶體驗,以便回撥到服務器並檢查到期票證。您可能能夠通過http調整下面的代碼並在頁面中包含過期信息,並在客戶端javascript中記錄時間,如果您不想去ajax路線。

 if (User.Identity.IsAuthenticated) 
     { 
      var identity = (FormsIdentity)User.Identity;  
      viewModel.UtcInactivityExpiryDate = identity.Ticket.Expiration.ToUniversalTime();     
     } 

如果你去ajax路線,還有另一個問題。如果您正在使用ajax呼叫,則必須停止更新不活動超時。您可以通過用原始cookie覆蓋新的身份驗證cookie來完成此操作。在你的ajax請求結束時。

  var requestCookie = HttpContext.Current.Request.Cookies[".ASPXAUTH"]; 
      if (requestCookie != null) 
      { 
       HttpContext.Current.Response.Cookies.Add(requestCookie); 
      }