asp.net-mvc - 检查用户是否仍然登录而不重置身份验证超时

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

我有一个 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/

相关文章:

asp.net-mvc - 存储库模式 - 如何正确处理 JOIN 和复杂查询?

asp.net - 从普通的 .aspx 页面启动 ASP MVC 项目

linux - 在软件中实现 802.1x 验证器?

c# - 身份 MVC5 中的特权升级和 session 劫持

c# - Asp.Net Identity 在没有电子邮件的情况下保存用户

asp.net-mvc - 迁移到实现IDataSource的ASP.NET MVC控件

c# - 通过使用 C# 指令在 ASP.NET MVC 应用程序中启用 "Debug mode"

java - 在 Java 中确定当前用户的受支持的、不可欺骗的方法?

asp.net-mvc - MVC5 基于声明的身份验证 - 合适的声明项

asp.net-mvc - 在 Controller 构造函数中使用 HttpContext