Wie kann ich beim Schließen des Browsers oder explizite Logou asp.net Sitzungen nur ablaufen explizit festgelegt?

StackOverflow https://stackoverflow.com/questions/93888

  •  01-07-2019
  •  | 
  •  

Frage

In der Standardeinstellung scheint die Sitzung Ablauf 20 Minuten zu sein.

Update:. Ich möchte nicht, die Sitzung abläuft, bis der Browser geschlossen wird

Update2: Das ist mein Szenario. Benutzer meldet sich in Ort. Spielt rund um den Ort. Blätter Computer für eine Dusche zu gehen (> 20 min;)). Komm zurück zum Computer und sollte in der Lage zu spielen, um. Er schließt Browser, die Session-Cookie gelöscht. Das nächste Mal, wenn er von einem neuen Browser-Instanz auf die Seite kommt, er müsste sich wieder anmelden.

In PHP kann ich session.cookie_lifetime in php.ini auf Null gesetzt, dies zu erreichen.

War es hilfreich?

Lösung

Wenn Sie die Sitzung über 20 Minuten verlängern möchten, können Sie die Standardeinstellung ändern, die IIS-Server-Betreiber, oder Sie können es in der web.config-Datei festgelegt. Zum Beispiel des Timeout auf 60 Minuten in web.config eingestellt werden:

<configuration>
  <system.web>
    <sessionState timeout="60" />
    ... other elements omitted ...
  </system.web>
  ... other elements omitted ....
</configuration>

Sie können für einen bestimmten Benutzer in Code das gleiche tun mit:

Session.Timeout = 60

Unabhängig davon, welche Methode Sie wählen, können Sie das Timeout ändern, was auch immer Sie denken, Wert angemessen ist, damit Benutzer andere Dinge zu tun und immer noch ihre Sitzung beibehalten.

Es gibt Nachteile natürlich: für den Anwender gibt es das mögliche Sicherheitsproblem ihren Browser unbeaufsichtigt verlassen und nachdem er noch angemeldet, wenn jemand anderes beginnt, es zu benutzen. Für Sie gibt es das Problem der Speicherauslastung auf dem Server - die längeren Sitzungen dauern, desto mehr Speicher werden Sie zu einem beliebigen Zeitpunkt verwendet werden. Unabhängig davon, ob es ankommt, hängt von der Last auf dem Server.

Wenn Sie nicht über eine angemessene längere Timeout guesstimate wollen, müssen Sie eine der anderen Techniken verwenden, bereits angedeutet, erfordern einige JavaScript im Browser ausgeführt wird den Server in regelmäßigen Abständen auf Ping und / oder die Sitzung zu verlassen, wenn ein Seite entladen wird (sofern der Benutzer nicht auf eine andere Seite auf Ihrer Website geht, natürlich).

Andere Tipps

Sie können eine kurze Session-Timeout (zB 5 Minuten) eingestellt und dann auf die Seite erhalten Sie den Server regelmäßig abzufragen, entweder durch Javascript mit Hilfe eines XmlHttpRequest alle 2 Minuten zu schießen, oder durch einen versteckten iFrame, die auf eine Seite verweist die alle 2 Minuten aktualisiert sich.

Sobald der Browser geschlossen wird, würde die Sitzung ziemlich schnell danach Timeout, da es nichts wäre es am Leben zu erhalten.

Dies ist kein neues Problem, gibt es mehrere Szenarien, die behandelt werden müssen, wenn Sie alle Möglichkeiten, wie eine Sitzung, hier sind die allgemeinen Beispiele für einige von ihnen enden kann fangen wollen:

  1. Die Browser-Instanz oder Tab geschlossen wird.
  2. Benutzer navigiert weg von Ihrer Website die gleiche Browser-Instanz oder Reiter.
  3. Der Anwender verliert ihre Verbindung zum Internet (diese Verlustleistung zu Computern des Benutzers oder anderen Mitteln umfassen könnte).
  4. Benutzer geht weg vom Computer (oder auf andere Weise stoppt mit Ihrer Website interagieren).
  5. Der Server verliert Energie / Neustarts.

Die ersten beiden Elemente müssen vom Kunden behandelt werden, um Informationen an den Server gesendet, in der Regel würden Sie Javascript in einer Logout-Seite zu navigieren, die schnell die Sitzung abgelaufen ist.

Das dritte und vierte Element, die normalerweise durch die Einstellung des Sitzungszustand Timeout behandelt werden (es kann jede Menge Zeit sein). Die Menge an Zeit, die Sie verwenden, basierend Wert auf der Suche nach, dass die Benutzer können Ihre Website nutzen, ohne den Server zu überwältigen. Eine sehr grobe Daumenregel könnte 30 Minuten plus oder minus 10 Minuten. Doch der entsprechende Wert würde wahrscheinlich Gegenstand eines anderen Postens sein muß.

Das fünfte Element behandelt werden basierend auf, wie Sie Ihre Sitzungen zu speichern. Sessions in-Zustand gespeichert wird keinen Neustart überleben, da sie in dem Arbeitsspeicher des Computers sind. Sessions in einem DB oder Cookie gespeichert würde den Neustart überleben. Sie könnten damit umgehen, wie Sie für richtig halten.

In meiner begrenzten Erfahrung, wenn dieses Problem vor gekommen ist, wird es bestimmt, dass das Session-Timeout auf einen akzeptablen Wert nur Einstellung ist alles, was benötigt wird. Doch es kann getan werden.

Dies ist die Standardeinstellung. Wenn Sie eine Sitzung haben, speichert er die Sitzung in einem „Session-Cookie“, die automatisch gelöscht wird, wenn der Browser geschlossen wird.

Wenn Sie die Sitzung zwischen zwei Browser-Sitzung haben wollen, müssen Sie die Cookie.Expired auf ein Datum in der Funktion setzen.

Da die Sitzung, die Sie sprechen von dem Server gespeichert ist, und nicht auf dem Client Sie können nicht tun, was Sie wollen.

Aber betrachten Sie nicht ASP.NET Server-Seite Sitzung verwenden und stattdessen nur auf Cookies verlassen.

Leider aufgrund der expliziten Natur der Bahn und die Tatsache, dass es zwischen einem Website-Server und einem Benutzer-Browser keine permanente Verbindung ist es unmöglich zu sagen, wenn ein Benutzer den Browser geschlossen hat. Es gibt Ereignisse und JavaScript, die Sie implementieren können (z onunload), die Sie Platz auf dem Server verwenden kann, die ‚töten‘ könnte wiederum ruft zurück eine Sitzung - Session.Abandon();

Sie können die Timeout-Länge einer Sitzung, in der web.config gesetzt, erinnern diese Timeout auf der Grundlage der Zeit, da der letzte Aufruf an den Server durch den Browser des Benutzers platziert wurde.

Browser TimedOut nicht hinzugefügt.

Es gibt keine Möglichkeit, die Sitzung explizit zu löschen, wenn Sie in irgendeiner Weise kommunizieren nicht zwischen dem Client und dem Server an dem Punkt der Fenster schließen, so würde ich erwarten, eine spezielle URI-Anforderung sendet die Sitzung an der Stelle des löschen ein Fenster schließen Nachricht zu empfangen.

Meine Javascript ist nicht gut genug, um die tatsächlichen Anweisungen zu geben, das zu tun; leider: (

Sie kann nicht, wie Sie nicht, wie die HTML-Client-Antwort steuern kann.

Eigentlich, warum müssen Sie dies tun? Solange niemand die Sitzung abholen kann wieder verwenden, wäre es nach, dass 20 Minuten ablaufen. Wenn die Ressourcen nicht egal, setzen Sie eine aggressivere Sitzung Ablauf (die meisten Hosting-Unternehmen haben das, was schrecklich nervig ist) oder verwenden Sie weniger Objekte in der Sitzung. Versuchen Sie, jede Art von Objekt zu vermeiden, anstatt speichert nur die Schlüssel für das Abrufen von ihnen, das ist ein sehr wichtiges Design, wie es Ihnen hilft, Ihre Sitzung zu einem State-Server zu skalieren, wenn Sie groß werden.

mich korrigieren, wenn ich die Absicht Ihrer Frage am Verlesen, aber die zugrunde liegende Frage scheint über weniger zu sein, wie die Sitzung zu zwingen, zu beenden, wenn ein Benutzer den Browser schließt und mehr darüber, wie eine Sitzung von beenden, bis dem Browser zu verhindern geschlossen ist.

Ich denke, die wirkliche Antwort darauf ist, neu zu bewerten, was Sie Sitzungen verwenden zu tun. Wenn Sie sie verwenden Zustand zu halten, ich stimme mit den anderen Antworten, dass Sie kein Glück sein kann.

Allerdings ist ein bevorzugter Ansatz ist es, einen dauerhaften Zustand Mechanismus mit dem gleichen Umfang wie die Browser-Session wie ein Cookie zu verwenden, die erlischt, wenn der Browser geschlossen wird. Das Cookie könnte gerade genug Informationen enthalten, um die Sitzung auf dem Server erneut einzuleiten, wenn es seit der letzten Anforderung abgelaufen ist. In Verbindung mit einem relativ kurzen (5-10 min) Session-Timeout, ich glaube, das gibt Ihnen die beste Balance zwischen Server Ressourcennutzung und den Benutzer nicht macht ständig „Neustart“, um die Website.

Oh du die Frage neu geschrieben haben.

Dass man durchaus machbar ist, solange Javascript lebendig ist. Verwenden Sie timed Ajax tun. Prüfen Sie mit Prototyp-Bibliothek http://www.prototypejs.org PeriodicalExecutor oder jQuery mit der Ajax + Timer-Plugin. Richten Sie eine Dummy-Seite, die Ihr Testamentsvollstrecker von Zeit zu Zeit rufen wird, so dass Ihre Sitzung immer am Leben ist, es sei denn, wenn er Logouts (den Ajax-Timer in der gleichen Zeit töten) oder Browser schließen (die die Testamentsvollstrecker Mittel getötet sowieso)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top