Ich bin nicht überzeugt, dass dies ein "guter" Weg ist... aber Sie können sehr fragwürdig eine Referenz auf die Sitzung in einer freigegebenen/static Variablen speichern und dann darauf zugreifen.
Public Class SessionHelper
Public Shared TheSession As HttpSessionState
End Class
In Ihrem Sitzungsstart-Ereignis (ich habe noch nicht herausgefunden, wo der beste Ort dafür ist, da die Sitzung meines Wissens nach im Anwendungsstart nicht verfügbar ist)
Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
' Eine Referenz speichern... dies nur einmal machen usw.
If SessionHelper.TheSession Is Nothing Then
SessionHelper.TheSession = HttpContext.Current.Session
End If
Dann können Sie einfach auf den Helfer verweisen
Dim someVariable as String = SessionHelper.TheSession.Item("ItemName")
Ein paar Dinge, bei denen ich mir nicht sicher bin, über diese Methode:
- bin mir nicht sicher, ob das Sitzungsobjekt jetzt nicht mehr thread-sicher ist
- es scheint nicht ganz richtig zu sein
- dieses Beispiel ist äußerst einfach...
Bearbeiten
Ich habe überprüft, dass dies für mich funktioniert hat, indem ich etwas in den Cache hinzugefügt habe und gesehen habe, ob die Sitzung im Cache-Entfernungsrückruf verfügbar war, für den Http.Context.Current nicht verfügbar ist.
Bearbeiten 2
Hier ist ein Screenshot, der den Wert korrekt zurückgibt. Es muss also bis zu einem gewissen Grad funktionieren, aber die Tatsache, dass die SessionId nicht festgelegt ist, ist irgendwie besorgniserregend... Ich weiß, dass ich diese Technik schon einmal verwendet habe, um auf das Cache-Objekt zuzugreifen, aber der Cache ist der Cache, während die Sitzung etwas benötigt, um jede Sitzung zu identifizieren... Hier haben Sie es trotzdem: