Classic ASP / Ende der session umleiten
Möchte ich automatisch umleiten auf die login-Seite, wenn der Benutzer die Sitzung abgelaufen ist.
Ich habe mit dem folgenden code in eine include-Datei, die sich auf die oben auf jeder Seite in meiner Bewerbung:
Session.Timeout = 60
Response.AddHeader "Refresh", CStr(CInt(Session.Timeout + 1) * 60)
Response.AddHeader "cache-control", "private"
Response.AddHeader "Pragma","No-Cache"
Response.Buffer = True
Response.Expires = 0
Response.ExpiresAbsolute = 0
If Session("accountID") = "" Then
Response.Redirect("http://www.mydomain.com/")
End If
Funktioniert es, aber es ist sehr leichte Fehler. Jedes jetzt und dann die Seite neu geladen, obwohl die Sitzung noch am Leben und es scheint, dass es aktualisiert wird, bevor die 60 Minuten abgelaufen sind!
Kann jeder sehen, was das problem ist oder könnt Ihr eine andere Methode vorschlagen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehen, als ob Sie zu tun haben dieser client-Seite würde ich zugunsten von JavaScript/jQuery und AJAX über diese Methode. Hier ist ein Beispiel, wie es zu tun.
Im wesentlichen nur set-up ein AJAX-Aufruf von poll ein Skript gibt (im JSON-format), ob der Benutzer angemeldet ist oder nicht; wenn Sie nicht sind, dann übertragen Sie Sie auf eine andere Seite.
Die Vorteile dieser Methode sind, dass Sie können die Umfrage, Wann immer Sie wollen, z.B. alle 10 Sekunden, um zu sehen, ob der Benutzer noch angemeldet sind, anstatt zu warten, bis eine volle Stunde. Es bedeutet auch, dass Sie nicht brauchen, um die session-time-out-Figur in Ihrem code und so kannst du lassen, die werden bestimmt in IIS. Auch wenn der Benutzer abgemeldet an anderer Stelle in Ihrem system, oder Ihr Anwendungspool recycelt und Ihre Sitzung wurde zurückgesetzt, dies erkennen würde es ziemlich schnell.
Merke ich aus Ihrem Profil, du bist ein Paparazzi-Fotografen. Ich würde überlegen, diese DSLR-Methode und response-header-Methode, die billige Handy-Kamera-Methode :o.
Bauen Ihre session-checker-Seite erstellen Sie eine Datei namens session.asp (in den gleichen Ordner wie die anderen Dateien, die das Leben einfacher). In ihm steckte:
Wenn der Benutzer angemeldet ist, gibt es {"angemeldete": true}, wenn Sie keine {"angemeldete": false}. Dies ist, was wir verwenden werden auf Ihrer anderen Seite, um die Umfrage, wenn Sie angemeldet sind, indem Sie diese Seite regelmäßig und Lesen Sie die Antwort.
Nun auf Ihren Seiten, die ursprünglich Ihre Antwort.AddHeader-code in. Entfernen Sie alle Ihre code mit diesem ersetzt.
Zuerst stellen Sie sicher, Sie haben eine Referenz auf jQuery auf Ihren Seiten:
Und dann setzen Sie unter dieser Zeile Folgendes:
Alles gut, sollte es funktionieren. Ich habe die obige Umfrage alle 30 Sekunden (30000), aber Sie könnte erhöhen/verringern Sie das, was Sie wollte.
Hinweis, habe ich mir große Teile der code oben aus https://stackoverflow.com/a/4928564/171703 und https://stackoverflow.com/a/2709160/171703.
Update:
Aus den Kommentaren unten, wenn Sie möchten, dass der Benutzer die Sitzung nach Ablauf des timeout-Figur (ob Sie halten Ihre Sitzung aktiv ist oder nicht), dann könnte man dies tun.
Wenn der Benutzer angemeldet ist, setzen Sie eine neue session-variable für LoginExpiration:
Dieser nimmt die aktuelle Zeit und fügt es der session-timeout Abbildung - geben Sie die Zeit, wenn Ihre Sitzung zerstört werden sollten.
Wenn Sie Ihre Sitzung.asp auf den folgenden nimmt die LoginExpiration Figur und zurückgibt, dass der Benutzer nicht angemeldet ist in der Falle:
Ist:
Ich habe die loginExpiration Figur in der JSON-Antwort, so könnte man die Arbeit mit der client-Seite, wenn Sie auch wollte.
Legen Sie diese in eine include-Datei, die Sie in allen Seiten, die Sie geschützt werden müssen.