[英]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.