2016-09-21 3 views
6

ohne Zurücksetzen habe ich eine ASP.Net MVC 5 Anwendung, Identität 2 für die Authentifizierung unter Verwendung (der Standard-Authentifizierungs Cookie-Middleware verwendet wird, konfiguriert, um mit ExpireTimeSpan = 30 Minuten und SlidingExpiration = true).prüfen, wenn der Benutzer in noch angemeldet ist auth Timeout

Ich habe Authentifizierung konfiguriert, um nach 30 Minuten ablaufen, und ich muss von Client-Seite überprüfen, ob der Benutzer immer noch angemeldet ist. Ich könnte einen einfachen AJAX-Aufruf dafür, aber es würde meine Sitzung aktualisieren und das zurücksetzen Timeout, genau das möchte ich vermeiden. Die Verwendung eines 30-Minuten-Timeouts in Javascript funktioniert nur, wenn der Client nur eine Registerkarte in meiner Anwendung geöffnet hat, was ich nicht garantieren kann.

ich darüber nachdachte, ein benutzerdefiniertes Attribut auf eine Aktion hinzufügen, die überprüfen können, wenn die Authentifizierung noch gültig ist, aber ohne das Timeout zurückzusetzen. Gibt es eine Möglichkeit, das zu tun?

Alternativ könnte dies wahrscheinlich auch mit einer OWIN Middleware getan werden, aber wieder, ich weiß nicht, wie die Authentifizierung zu überprüfen, ohne das Timeout zurückzusetzen. Hier

+0

Eigentlich, was Sie nach dem Auffinden Benutzer tun werden angemeldet ist oder nicht? –

+0

Die Idee war, den Benutzer auf eine andere Seite umzuleiten. – Riokmij

+0

Wenn der Benutzer nicht eingeloggt ist, werden Sie zu einer Seite weitergeleitet. Habe ich recht? –

Antwort

1

ist die Funktion Ich nutze die Leistung zu vollbringen, obwohl ich nur MVC bin 4. Ich kann es nur durch eine zeitlich Ajax Post nennen. Ich benutze es, um zu bestimmen, wie lange ich meinen Ajax-Anruf einstellen muss, weshalb ich die Anzahl der verbleibenden Sekunden zurückgebe.

<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

Klarstellung: Es ist schon einige Zeit her, seit es geschrieben wurde, aber wenn Erinnerung mir dient, erscheint mir die Entfernung des Cookies von der Antwort als Schlüssel. – Steve

+0

Ich verwende keine Formularauthentifizierung, sondern Asp.Net Identity, daher ist diese Lösung in meinem Fall nicht anwendbar. – Riokmij

+0

Entschuldigung, ich habe den Teil Ihrer Frage vermisst, in dem Identität erwähnt wurde. Ich bin mit der Technologie nicht vertraut. Es scheint sehr wahrscheinlich, dass der Server das Cookie noch aktualisiert und es in der Antwort an den Client zurückgibt. Kann man das nicht verhindern? – Steve

Verwandte Themen