我有一个 ASP.Net MVC 5 应用程序,使用身份 2 进行身份验证(使用标准 cookie 身份验证中间件,配置为 ExpireTimeSpan = 30 分钟和 SlidingExpiration = true)。
我已将身份验证配置为在 30 分钟后过期,我需要从客户端检查用户是否仍处于登录状态。我可以为此进行一个简单的 AJAX 调用,但它会刷新我的 session 并重置超时,这是正是我想要避免的。仅当客户端在我的应用程序上只打开一个选项卡时,在 Javascript 中使用 30 分钟超时才有效,这是我无法保证的。
我正在考虑将自定义属性添加到可以检查身份验证是否仍然有效但不重置超时的操作中。有没有办法做到这一点?
或者,这也可以使用 OWIN 中间件来完成,但同样,我不知道如何在不重置超时的情况下检查身份验证。
最佳答案
这是我用来完成这项壮举的函数,虽然我只使用 MVC 4。我只是通过定时 ajax 帖子调用它。我用它来确定我需要设置我的定时 ajax 调用多长时间,这就是我返回剩余秒数的原因。
<OutputCache(NoStore:=True, Duration:=0)> _
Function GetExpirySeconds() As ActionResult
Dim tkt As FormsAuthenticationTicket = Nothing
Dim retVal As ActionResult = Json("expired")
Response.Cookies.Remove(FormsAuthentication.FormsCookieName)
If Request.Cookies(FormsAuthentication.FormsCookieName) IsNot Nothing AndAlso Request.Cookies(FormsAuthentication.FormsCookieName).Value <> "" Then
tkt = FormsAuthentication.Decrypt(Request.Cookies(FormsAuthentication.FormsCookieName).Value)
retVal = Json(Math.Floor((tkt.Expiration - Now).TotalSeconds))
If Math.Floor((tkt.Expiration - Now).TotalSeconds) <= 0 Then retVal = Json("expired")
End If
Return retVal
End Function
Blog Post for Reference: Kobi's Blog
关于asp.net-mvc - 检查用户是否仍然登录而不重置身份验证超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39609046/