Laden...

Sessionvariablen

Erstellt von haargel vor 11 Jahren Letzter Beitrag vor 11 Jahren 959 Views
H
haargel Themenstarter:in
264 Beiträge seit 2005
vor 11 Jahren
Sessionvariablen

Leider ist ja die Session per HttpContext.Current.Session nicht überall verfügbar.
Gibt es irgendeine Möglichkeit pro Session Variablen bzw. Objekte im Speicher abzulegen die in allen Klassen zur Verfügung stehen?

5.941 Beiträge seit 2005
vor 11 Jahren

Hallo haargel

Wo ist es nicht verfügbar?
Für HttpHandler gibt es ein Marker Interface, womit man kennzeichnet das der SessionState verfügbar sein sollte.

Für HttpModule ebenso.
Ansonsten ist dieser praktisch überall verfügbar.

Du kannst dir aber einen Wrapper um den SessionState schreiben, mitdem du diesen 1. mocken kannst oder aber an einem anderen Ort speichern.
Das könnte auch helfen.

Gruss Peter

Hinweis von gfoidl vor 11 Jahren

Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 3.1

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

H
haargel Themenstarter:in
264 Beiträge seit 2005
vor 11 Jahren

Danke, es handelt sich tatsächlich um HttpHandler und das IRequiresSessionState Interface hat geholfen.

Allerdings reagiert die Applikation jetzt nicht wie erwartet: Ich hätte mir gedacht, dass pro Browserinstanz bzw. -tab eine eigene SessionID vergeben wird, aber es scheint so als würde für alle InternetExplorer (auf dem selben Rechner) die selbe SessionID vergeben...
Ich verwende Cookies, da ich die SessionID nicht im Url übergeben darf.

HttpContext.Current.Items scheint auch nicht die Lösung zu sein, da es nur pro Request gültig ist.

Gibt es dafür eine Lösung?

16.842 Beiträge seit 2008
vor 11 Jahren

Da fehlen Dir die Grundlagen, wie das HTTP Protokoll funktioniert, oder? 😉

Die Webanwendung weiß nicht, wie viel Instanzen Du auf hast - oder wie viel Tabs. Dahingehend kann es auch nicht die Sessions pro Tab verteilen.

Du kannst das nur mit Hacks lösen, wie zum Beispiel mit einmaligen IDs innerhalb einer Seite, die Du immer wieder mit gibst (so wirds auch in Office 365 gelöst).
Es gibt zwar die regenerateExpiredSessionId aber die funktioniert nicht wirklich sauber und kann man leicht umgehen.