2016-09-21 45 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