2009-03-30 3 views
2

Ich habe Handler für meine Session_Start und Session_End Ereignisse. Wenn ich die Anwendung zum ersten Mal starte, funktioniert alles einwandfrei. Wenn ich die Sitzung verlasse und das Standard-Timeout auftritt, sehe ich meinen Session_End-Wurf. Ich erwarte dieses Verhalten.ASP.NET Session_End direkt nach Session_Start nach einem Sitzungszeitlimit aufgerufen

Sagen wir aber, ich komme nach der Zeitüberschreitung zurück und aktualisiere eine Seite. Die Session_Start-Methode wird ausgeführt, aber dann wird sofort die Session_End-Methode ausgeführt. Ich erwarte weitere 15 Minuten Leerlauf zwischen Session_Start und Session_End.

Was wäre das Problem?

EDIT: Ja, gleiche Sitzung ID.

EDIT 2: Cookies sehen so aus, als sollten sie am Ende der Sitzung ablaufen. Ich bin mir nicht sicher, warum ich diese Schleife von Session_Start/Session_End bekomme. Ich habe auch versucht, Session.Abandon() von Session_End aufzurufen, und das hat nicht funktioniert. Dies läuft auch vom ASP.NET Development Server ab. Ich habe es noch nicht auf einem echten IIS-Server versucht.

Antwort

0

Können Sie überprüfen, ob die Ereignisse für die gleiche Sitzungs-ID ausgelöst werden?

1

.Net macht einige funky Sachen mit ihren Sitzungscookies, insb. in Verbindung mit Forms auth. Ich rate nur, aber ich würde denken, dass der Client sich an den Cookie hält und ihn auch nach seinem ungültigen Wert erneut an den Server sendet, was (ich vermute hier) einen Neustart der Sitzung auslösen könnte, An diesem Punkt erkennt es, dass es ungültig ist und es zerstört, was das Ende der Sitzung verursacht.

Versuchen:

  1. Ihre Cookies Sicherzustellen, sind richtig eingestellt
  2. Aufruf Session.Abandon() und FormsAuthentication.SignOut()

Nicht sicher ablaufen, ob das hilft, aber FWIW .

4

Es ist ein bisschen spät zu beantworten, aber es könnte nützlich sein für andere Benutzer, die das gleiche Problem haben .. Ich habe das gleiche Verhalten wie du gesehen: Session_Start() und Session_End() werden für jede Anfrage nach dem ersten Timeout aufgerufen und die SessionID ist immer das gleiche:

  1. ich habe den gleichen Code mit ASP.NET 4.0 ausführen und das Problem ist weg.

  2. Als Workaround in ASP.NET 2.0/3.5, einfach alles in die Sitzung Sammlung (Session["dummy"] = "dummy"), und Session_Start() und Session_End() wird normal verhalten.

+1

Ich habe gerade das gleiche Problem gesehen. Obwohl ich mir über Ihre Arbeit nicht sicher bin, da wir für jede erstellte Sitzung * immer * etwas in der Sitzung speichern. Ich habe gelesen, dass Session_End nicht ausgelöst wird, wenn Sie eine völlig leere Sitzung haben [http://www.vikramlakhotia.com/Mystries_of_when_does_Session_End_event_fires_in_AspNet.aspx] [In meinem Fall hatte ich einen Click-Handler auf der Seite, die AJAX-Anfragen an die Server - wenn das einen Unterschied macht] –

+0

Verwenden Sie 'Session_Start' und' Session_End' nicht für *** Count *** Benutzer? WebFarm. Jeder Quellcode samplefull? –

0

Dies ist ein Duplikat von diesem question.

Es ist wegen der Art, wie ASP.NET 2.0/3.5 Sitzungen behandelt, je nachdem, ob es verwendet wird. Unter normalen Umständen versucht es nicht, eine Sitzung bis zur ersten Verwendung fortzusetzen und gibt daher keinen Sitzungscookie aus (falls dieser nicht existiert). Bei der ersten Sitzung wird verwendet, eine Sitzung wird auf dem Server erstellt und ein Sitzungscookie wird ausgegeben.

Jetzt, wenn eine vorherige Sitzung neu gestartet, aber nicht verwendet wird, wird ASP.NET ein wenig verwirrt.Es versucht, die unbenutzte (neugestartete) Sitzung sofort abzubrechen, da sie nicht benötigt wird, was zu einem frühen Session_End führt. Es löscht jedoch nicht den bereits vorhandenen Sitzungscookie, und daher wiederholt jede nachfolgende Anforderung die Sequenz, startet die Sitzung neu und beendet sie dann, bis der Cookie gelöscht oder die Sitzung verwendet wird.

In .Net 4.0 dieses Verhalten hat sich geändert, und das Ereignis wird in diesem Fall nicht mehr ausgelöst.

1

Für jeden mit dem gleichen Problem. Die Antwort von Alex B hat mich gerettet.

Dies passiert nicht mehr bei 4.0, aber wenn Sie etwas in die Session innerhalb des Session_Start-Handlers einfügen, wird der Session_Start -> Session_End-Kreis abgeschnitten und Sie müssen nicht einmal Cookies löschen.

Verwandte Themen