Ich könnte wirklich die Sitzungsvariablen eines Benutzers aus meinem HTTPModule heraus aktualisieren, aber soweit ich sehen kann, ist dies nicht möglich.
UPDATE: Mein Code wird derzeit im OnBeginRequest ()
Ereignishandler ausgeführt.
UPDATE: Nach den bisher erhaltenen Ratschlägen habe ich versucht, dies der Init ()
Routine in meinem HTTPModule hinzuzufügen:
AddHandler context.PreRequestHandlerExecute, AddressOf OnPreRequestHandlerExecute
Aber in meiner OnPreRequestHandlerExecute
Routine ist der Sitzungsstatus immer noch nicht verfügbar!
Danke und Entschuldigung, wenn mir etwas fehlt!
asp.net
session-state
httpmodule
Chris Roberts
quelle
quelle
HttpContext.Current.Session sollte einfach funktionieren , vorausgesetzt, Ihr HTTP-Modul verarbeitet keine Pipeline-Ereignisse , die vor der Initialisierung des Sitzungsstatus auftreten ...
BEARBEITEN, nach Klarstellung in Kommentaren: Bei der Behandlung des BeginRequest-Ereignisses ist das Session-Objekt tatsächlich immer noch null / Nothing, da es noch nicht von der ASP.NET-Laufzeit initialisiert wurde. Um dies zu umgehen , verschieben Sie Ihren Bearbeitungscode in ein Ereignis, das nach PostAcquireRequestState auftritt. Ich mag PreRequestHandlerExecute selbst dafür, da alle Arbeiten auf niedriger Ebene in dieser Phase so gut wie erledigt sind, aber Sie dennoch jede normale Verarbeitung verhindern.
quelle
Der Zugriff auf das
HttpContext.Current.Session
in aIHttpModule
kann imPreRequestHandlerExecute
Handler erfolgen.PreRequestHandlerExecute : "Tritt kurz vor dem Ausführen eines Ereignishandlers durch ASP.NET auf (z. B. eine Seite oder ein XML-Webdienst)." Dies bedeutet, dass dieses Ereignis ausgeführt wird, bevor eine Aspx-Seite bereitgestellt wird. Der 'Sitzungsstatus' ist verfügbar, damit Sie sich selbst ausschalten können.
Beispiel:
quelle
Wenn Sie ein normales, einfaches HttpModule in einer verwalteten Anwendung schreiben, die Sie über Seiten oder Handler auf asp.net-Anforderungen anwenden möchten, müssen Sie nur sicherstellen, dass Sie nach der Sitzungserstellung ein Ereignis im Lebenszyklus verwenden. PreRequestHandlerExecute anstelle von Begin_Request ist normalerweise der Ort, an den ich gehe. mdb hat es richtig in seiner edit.
Das längere Code-Snippet, das ursprünglich als Antwort auf die Frage aufgeführt war, funktioniert, ist jedoch kompliziert und umfassender als die ursprüngliche Frage. Der Fall wird behandelt, wenn der Inhalt von etwas stammt, für das kein ASP.net-Handler verfügbar ist. Dort können Sie die IRequiresSessionState-Schnittstelle implementieren und so den Sitzungsmechanismus auslösen, um ihn verfügbar zu machen. (Wie eine statische GIF-Datei auf der Festplatte). Grundsätzlich wird ein Dummy-Handler festgelegt, der diese Schnittstelle nur implementiert, um die Sitzung verfügbar zu machen.
Wenn Sie nur die Sitzung für Ihren Code wünschen, wählen Sie einfach das richtige Ereignis für Ihr Modul aus.
quelle
Probieren Sie es aus: In der Klasse MyHttpModule deklarieren Sie:
Dann:
Und so in einer anderen Methode (dem Ereignis) in derselben Klasse:
quelle