2009-05-18 14 views
1

Während Sitzung Start hat man Zugriff auf das Request-Objekt. Wie steht es mit Session End, hat es immer noch Zugriff auf das Request-Objekt? Zum Beispiel möchte ich zählen, wie viele Browser derzeit mit meiner Anwendung verbunden sind.asp.net Sitzungsstatus

Edit 1: Wenn Session End keinen Zugriff auf das Request-Objekt hat, auf welche Informationen hat es Zugriff? Sitzungs-ID usw.?

Edit 2: Wenn Session End nicht verwendet werden kann, um Trennungen zu verfolgen, wie verfolgt man Trennungen in ASP.Net?

Danke

Antwort

1

Session_End wird ausgelöst, wenn InProc verwendet wird.

Session_End wird 1 gefeuert werden) nach n Minuten Inaktivität (n = Timeout-Wert) oder 2), wenn jemand anruft Session.Abandon()

Session_End nicht gefeuert geht, wenn man den Browser schließt .

Session_End erfordert, dass der Sitzungsstatus festgelegt wird.

Wenn Sie die ursprünglichen Request.Browser-Daten benötigen, sollten Sie sie im Sitzungszustand speichern.

Während Session_End hat es Zugriff auf den Sitzungsstatus.

+0

Können Sie ein Beispiel für den Zugriff auf die Sitzung in Session_End angeben. Ich komme nicht dazu ... –

+0

void Session_End (Objekt Absender, EventArgs e) { \t Zeichenfolge str = Sitzung [Browser]; } –

1

Nein, das Request-Objekt ist in Session End nicht verfügbar.

Beachten Sie auch, dass das Sitzungsende nur dann ausgelöst wird, wenn Sie Session.Abandon() aus dem Code aufrufen, nicht wenn eine Sitzung aufgrund eines natürlichen Zeitlimits abläuft oder was Sie getan haben. Folglich ist es keine zuverlässige Methode, um Unterbrechungen zu verfolgen.

+0

Hallo Rex, danke für deine Antwort, wie verfolge ich die aktuell verbundenen Browsersitzungen in meiner Anwendung (zB Firefox 5 Sessions, IE 10 Sessions, etc). –

+0

Von der MSDN-Dokumentation "Die Session_OnEnd-Subroutine wird ausgeführt, wenn die Abandon-Methode aufgerufen wurde oder wenn die Sitzung abgelaufen ist." http://msdn.microsoft.com/en-us/library/ms178583(VS.80).aspx –

+0

@GregB es sagt, aber das erste Mal, dass ich versuchte herauszufinden, warum Session_End nicht wie erwartet funktionierte, ließ ich einen Debugger an den Prozess mit einem Haltepunkt auf meinem Session_End-Ereignis hängen, und es wurde nie getroffen, es sei denn, ich habe Session.Abandon() explizit angerufen. –

0

von the documentation

Die Session_OnEnd Ereignis tritt auf, wenn eine Sitzung oder Zeiten aufgegeben werden. Von den Server-integrierten Objekten sind nur die Anwendungsobjekt-, Serverobjekt- und Sitzungsobjektobjekte verfügbar.

Bemerkungen

Sie können nicht die Server.MapPath Methode im Session_OnEnd Skript aufrufen. Nach Standard wird Session_OnEnd als der anonyme Benutzer wie für die -Anwendung definiert ausgeführt. Für den Fall, dass kein anonymer Benutzer ist oder die Anmeldung für den anonymen Benutzer fehlschlägt, wird die OnEnd-Funktion nicht aufgerufen und wird ein Ereignis protokolliert.

+0

Ich habe noch nie gesehen, dass das Sitzungsende ausgelöst wurde, wenn eine Sitzung abbricht. Hast du? –

+1

@Rex M: Sitzungsende wird nur ausgelöst, wenn Sie In-Process-Sitzungen verwenden, nicht wenn Sie den Statusserver oder SQL Server als Sitzungsspeicher verwenden. – Rytmis

Verwandte Themen