2016-09-21 44 views
6

我有一个ASP.Net MVC 5应用程序,使用身份2进行认证(使用标准cookie认证中间件,与ExpireTimeSpan = 30分钟,并SlidingExpiration =真配置)。检查用户仍在登录而不重置AUTH超时

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

我在想添加自定义属性,可以检查认证仍然有效的行动,但没有复位超时。有没有办法做到这一点?

或者,这很可能也可以与OWIN中间件完成,但再一次,我不知道如何在不复位超时检查认证。

+0

其实你会发现用户登录与否后做什么? –

+0

这个想法是将用户重定向到不同的页面。 – Riokmij

+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

+0

澄清:写作已经有相当长的一段时间了,但如果记忆为我服务,从响应中删除cookie会成为我的关键。 – Steve

+0

我不使用表单身份验证,但Asp.Net身份,所以这种解决方案不适用于我的情况。 – Riokmij

+0

对不起,我错过了提到身份的问题的一部分。我不熟悉这项技术。似乎服务器仍在更新cookie并将其返回给客户端。有没有办法来防止这种情况? – Steve