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?
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
Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 3.1
--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011
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?
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.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code