是否可以确定日期&使用表单身份验证时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进行交互而不会向网络服务器发回任何回复或请求。
关于如何在不使用cookie的情况下实现此类行为的任何想法?
答案 0 :(得分:3)
我有类似的问题。在我的情况下,由于用户数量较少,我选择在页面上轮询ajax调用以回调服务器并检查过期票证时获得更好的用户体验。您可以通过调整以下代码并在页面中包含过期信息,并在客户端javascript中跟踪时间,如果您不想使用ajax路径,则可以逃脱。
if (User.Identity.IsAuthenticated)
{
var identity = (FormsIdentity)User.Identity;
viewModel.UtcInactivityExpiryDate = identity.Ticket.Expiration.ToUniversalTime();
}
如果你去ajax路线,还有另一个问题。如果使用ajax调用本身,则必须停止更新非活动超时。您可以通过使用原始身份验证覆盖新的身份验证cookie来实现此目的。在你的ajax请求结束时。
var requestCookie = HttpContext.Current.Request.Cookies[".ASPXAUTH"];
if (requestCookie != null)
{
HttpContext.Current.Response.Cookies.Add(requestCookie);
}