检查用户是否仍在登录而不重置auth超时

时间:2016-09-21 06:34:47

标签: asp.net-mvc authentication asp.net-identity-2

我有一个ASP.Net MVC 5应用程序,使用Identity 2进行身份验证(使用标准cookie身份验证中间件,配置为ExpireTimeSpan = 30分钟,SlidingExpiration = true)。

我已经将身份验证配置为在30分钟后过期,我需要从客户端检查用户是否仍然登录。我可以为此做一个简单的AJAX调用,但它会刷新我的会话并重置超时,这正是我想要避免的。只有当客户端在我的应用程序上只打开一个选项卡时,在Javascript中使用30分钟超时才有效,这是我无法保证的。

我正在考虑向可以检查身份验证是否仍然有效但不重置超时的操作添加自定义属性。有没有办法做到这一点?

或者,这可能也可以通过OWIN中间件完成,但同样,我不知道如何在不重置超时的情况下检查身份验证。

1 个答案:

答案 0 :(得分:1)

这是我用来完成壮举的功能,虽然我只使用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