2 Stimmen

Manually Erstellen / Befüllen des .NET Session-Objekts

Zunächst eine kurze Hintergrundinformation. Ich verwende .NET-Ausgabecaching und Substitutionssteuerelemente, um ein paar Bits auf jeder Seitenaktualisierung aktuell zu halten. Die statischen Methoden, die die Substitutionssteuerelemente verwenden, erfordern Zugriff auf das Session-Objekt. Leider ist die HttpContext-Sitzung in diesen Methoden null.

Ich werde meine App nicht neu schreiben, um einen anderen Speicher als die Sitzung zu verwenden. Die Sitzung ist perfekt für alles, was ich brauche, außer diesem einen Aspekt.

Kann ich manuell ein Sitzungsobjekt erstellen oder füllen oder anderweitig auf seine Daten durch eine Art von schwarzer Magie zu greifen? Das Sitzungscookie wird immer noch vom Client zum Server gesetzt. Die Informationen müssen irgendwo vorhanden sein. Wie komme ich daran?

1voto

Icemanind Punkte 45603

Sitzungsinformationen werden im Speicher des Servers gespeichert. Sie können jedoch ASP.NET so konfigurieren, dass die Sitzungsinformationen im SQL Server gespeichert werden.

1voto

davidsleeps Punkte 9219

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: Bildbeschreibung hier eingeben

0voto

Peter Bromberg Punkte 1506

HttpContext.Current.Session sollte Ihnen Zugriff auf die aktuelle Sitzung geben. Die einzige Zeit, in der dies nicht funktionieren würde, ist, wenn es kein aktuelles HttpContext gibt. Solange Sie eine Referenz auf System.Web haben, sollte es funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X