2008-11-16 11 views
14

Ich habe ein benutzerdefiniertes Sicherheitsprinzipal-Objekt, das ich in der global.asax für den aktuellen Thread festgelegt und alles ist gut, keine Probleme normalerweise.Asp.net System.Web.HttpContext.Current.Session null in global.asax

Ich füge jedoch nur ein dynamisches Bildfeature hinzu, indem eine Seite das Bild bereitstellt und wann immer diese dynamische Bildseite geladen wird, ist die System.Web.HttpContext.Current.Session in global.asax null, was mich daran hindert ab diesem Zeitpunkt das Sicherheitsprinzipal als normales und kaskadierendes Problem zu setzen.

Normalerweise ist die Sitzung in global.asax nur einmal während einer Sitzung beim Start null, wenn sich der Benutzer anmeldet, danach ist sie immer mit dieser einzigen Ausnahme verfügbar.

Die dynamische Bildseite geladen wird, wenn der Browser in der Originalseite dh

über ein Bild tage kommt

ich, dass dies zu raten ist ein Aspekt der Tatsache, dass der Browser die Seite anfordert, ohne einige Anmeldeinformationen senden damit?

Jede Hilfe würde sehr geschätzt werden.

Antwort

25

John,

Ich gehe davon aus Sie einen Ashx-Handler für den Handler verwenden. Wenn ja, sollten Sie von IRequiresSessionState zum Beispiel ableiten:

public class Images : IHttpHandler, System.Web.SessionState.IRequiresSessionState 
{ } 

Wenn Sie nicht ein Ashx verwenden, können Sie beschreiben, was Sie durch dynamische Bildseite bedeuten?

Josh

+1

Hallo Josh, du bist gerade meine Lieblings Person!:) Nein, ich habe eine Standard-ASPX-Seite verwendet, weil alle Beispiele über Handler, die eine Dateiendung und Konfigurationsänderungen erwähnt haben, nichts von Aschx wussten, es probierten und es die von Ihnen erwähnte Ableitung benötigten. Funktioniert perfekt. Prost! – JohnC

+1

Heh awsome! Ich liebe Ashx-Handler. Ich habe einen verwendet, um Bilder aus einer Datenbank zu ziehen, die wirklich gut funktioniert. Ich habe auch festgestellt, dass, wenn Sie einen POX-Service machen, der Ashx sehr gut funktioniert. – JoshBerke

3

Sitzung hat nichts damit zu tun, eingeloggt zu sein oder nicht.

Welches Ereignis überschreiben Sie, wenn Sie auf die Sitzung zugreifen möchten? Die Sitzung ist erst verfügbar, nachdem AcquireRequestState ausgelöst wurde.

Weitere Informationen finden Sie unter: http://msdn.microsoft.com/en-us/library/9ysfzy8h.aspx

+1

Sitzung hat alles mit meinem Geschäftsprinzip zu tun. Das Problem liegt darin, dass die Sitzung nur für diese eine Seite null ist, die 50 anderen in dieser großen Anwendung zeigen dieses Problem nicht. Ich greife auf Session von Application_PostAuthenticateRequest zu, wo es normalerweise kein Problem ist. – JohnC

+1

Um dieses Problem zu vermeiden, ignorieren Sie einfach den gesamten Hauptteil des Geschäfts. Das grundlegende Problem ist, dass Session nur für diesen einen Seitentyp null ist. – JohnC

+0

Jon welche Art von Seite ist das? Ist das ein Aspx? oder Ashx? – JoshBerke

0

ja du hast recht Dies geschieht, weil das Objekt dependancy könnte Konflikte in bei anderen Seite Übertragung parallel, die die Firewall zwischen den Sitzungen

8

in Global.asax.cs Session_Start brechen kann() und Session_End() müssen Sie "this.Session" verwenden !! Der Grund dafür ist, dass HttpContext nur verfügbar ist, wenn eine Anfrage bearbeitet wird. Deshalb erhalten Sie einen NULL auf HttpContext.Current.Session!

Von Microsoft-Website: "HttpContext-Klasse: Kapselt alle HTTP-spezifische Informationen über eine einzelne HTTP-Anfrage."

Aber fühle mich nicht schlecht ... ich bin auch auf diesen gefallen! :)