4 Stimmen

Das Schließen des Browsers sollte eigentlich die Sitzungsvariablen einer ASP.net-Sitzungskennung löschen

Ich habe eine ASP.net-Seite. Wenn ich die Webseite schließe, muss ich die Sitzungsvariablen löschen.

Wie soll ich damit umgehen, wenn ich die Zeitüberschreitung auf 20 Minuten begrenzen muss? Wenn er schließt und Login für eine beliebige Anzahl von Zeiten in den 20 Minuten Zeitüberschreitung Zeit

Gibt es eine Möglichkeit, die ASP.net-Sitzungskennung zu löschen?

11voto

GvS Punkte 51365

Das können Sie nicht tun.

  1. Sie können sich nicht darauf verlassen, dass ein Ereignis im Browser stattfindet
  2. Es gibt keine Möglichkeit für den Server, den Browser zu kontaktieren, um zu sehen, ob er noch aktiv ist.

Sie haben keine Kontrolle über den Browser des Endnutzers. Der Benutzer könnte den Browser schließen, abstürzen, die Verbindung zum Internet trennen, Javascript deaktiviert haben oder abstürzen lassen usw. usw. Oder der Benutzer gibt einfach eine andere URL ein (und kehrt dann vielleicht mit der Schaltfläche "Zurück" zu Ihrer Seite zurück und erwartet, dass er seine Sitzung mit Ihrer Website fortsetzt).

Das window.onbeforeunload wird bei jedem Entladen der Seite ausgelöst. Selbst wenn der Benutzer eine andere Seite auf Ihrer Website aufruft, so dass er Ihre Sitzung erneut benötigen könnte.

6voto

tvanfosson Punkte 506878

[EDIT] Wie andere vorgeschlagen haben, sollte Ihre Sitzung irgendwann auslaufen, aber wenn Sie die Sitzung vor dem Timeout schließen möchten (z. B. um große Sitzungsobjekte aufzuräumen) UND Javascript für Sie verfügbar haben...

Sie können dies mit einer window.onbeforeunload Handler, der zu einer Abmeldeseite zurückführt.

function CloseSession( )
{
    location.href = 'SignOut.aspx'; 
}
window.onbeforeunload = CloseSession;

Sie können dies auch über AJAX tun. Die Seite SignOut.aspx (oder welche Plattform Sie auch immer verwenden) sollte die Sitzung des Benutzers beenden.

5voto

dub Punkte 1346

Ich denke, die einzige gute Möglichkeit, dies zu tun, ist die Festlegung eines Timeouts für die Sitzungsvariablen auf dem Server. Ein Webserver hat keine Möglichkeit, mit Sicherheit zu wissen, ob ein Benutzer seinen Browser geschlossen hat oder nicht.

Javascript ist keine gute Option, da Sie es auf der Client-Seite deaktivieren können.

2voto

StingyJack Punkte 18514

Was passiert, wenn der Browser-Prozess endet?

Hier ist ein Trick

Sie sollten nicht so viele Sitzungsvariablen haben, dass sie bereinigt werden müssen. Siehe este Beitrag für andere Optionen.

0voto

Gareth Punkte 123487

Ich weiß nicht genau, wie ASP.Net seine Sitzungen implementiert, aber Teil des Cookie RFC ist, dass Sitzungscookies (solche ohne ein bestimmtes Ablaufdatum) gelöscht werden, wenn der Browser geschlossen wird.

Sicherlich gibt es eine Möglichkeit, ASP.Net dazu zu bringen, richtige Sitzungscookies zu verwenden, anstatt solche mit einem festen Timeout?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X