簡體   English   中英

確定ASP.NET表單身份驗證何時過期

[英]Determine when an ASP.NET Forms Authentication will expire

使用表單身份驗證時,是否可以確定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的情況下如何實現這種行為的任何想法?

我有一個類似的問題。 在我的情況下,由於用戶數量少,我不希望通過頁面上的輪詢ajax調用更好地用戶體驗,以回調到服務器並檢查到期票證。 如果您不想使用Ajax路由,則可以通過以下代碼進行調整,並通過http在頁面中包含到期信息,並在客戶端JavaScript中跟蹤時間。

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

如果您走Ajax路線,還有另一個陷阱。 如果您正在使用ajax調用,則必須停止ajax調用本身來更新不活動超時。 您可以通過使用原始的身份驗證cookie覆蓋新的身份驗證cookie來實現。 在您的ajax請求結束時。

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

暫無
暫無

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

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