webentwicklung-frage-antwort-db.com.de

Was ist der Unterschied zwischen diesen beiden HttpContext.Current.Session und Session - asp.net 4.0

Was ist der Unterschied zwischen diesen beiden Codes?.

HttpContext.Current.Session["myvariable"]
Session["myvariable"]

asp.net 4.0 und C # 4.0

19
MonsterMMORPG

Sie sind effektiv das Gleiche, indem sie auf dieselben Session-Daten zugreifen.

Sie können Session in Ihrem Code-Behind aufrufen, weil ASP.Net-Seiten standardmäßig den Typ System.Web.UI.Page erweitern. Dies hat eine Session public-Eigenschaft. Wenn Sie sich den Code dafür in Reflector ansehen, können Sie sehen, dass er HttpContext.Current.Session selbst (über seine eigene Context-Eigenschaft) aufruft.

In anderen Klassen haben Sie keinen Zugriff auf diese Eigenschaft, Sie können jedoch stattdessen HttpContext.Current.Session verwenden, um auf die Sitzungsdaten zuzugreifen, sofern Sie im Kontext einer Webanwendung ausgeführt werden.

24
Kasaku

In einem Standardszenario sind sie gleich. Der Unterschied besteht darin, dass die erste Anweisung auch in statischen Kontexten wie einer Webmethode funktioniert.

8
Variant

Da ist ein Unterschied. Die zweite (Session) ist eine Eigenschaft vieler .NET-Objekte, wie zum Beispiel Page. Sie können also keinen Zugriff darauf haben, beispielsweise im Konstruktor dieser Objekte. Der erste (HttpContext.Current.Session) ist jedoch immer bereit und steht Ihnen zur Verfügung (natürlich nachdem die Sitzung in die Request Processing Pipeline geladen wurde).

5
Saeed Neamati

Es gibt keinen Unterschied. Page.Session gibt den HttpContext.Current.Session zurück

Nachdem dies gesagt wurde, habe ich .dlls geschrieben, die als Erweiterungen für Webanwendungen dienen. Diese DLLs haben kein Konzept von Session. In diesen Fällen kann ich auf die aktuelle Sitzung der Webanwendung zugreifen, die meine .dll verwendet, indem auf HttpContext.Current.Session verwiesen wird.

3
James Hill

Es gibt keinen Unterschied. Sie sind das Gleiche; die zweite Form ist kürzer :)

2
Icarus

Es gibt keinen Unterschied im Verhalten. Wenn Sie in Ihrer benutzerdefinierten Klasse Code verwenden, für den HttpContext nicht direkt verfügbar ist, und auf den Sitzungswert zugreifen möchten, verwenden Sie die erste Codezeile, während die zweite Zeile beim Zugriff auf Page- oder Control-Klassen verwendet wird.

2
Nps

Eine weitere recht ausführliche Antwort von Nicholas Carey https://stackoverflow.com/a/6021261/365017

"Die Session-Eigenschaft von HttpApplication zeigt ein anderes Verhalten als das der Eigenschaft HttpContext.Current.Session. Beide geben einen Verweis auf dieselbe HttpSessionState-Instanz zurück, sofern eine verfügbar ist. Sie unterscheiden sich in der Vorgehensweise, wenn keine Instanz von HttpSessionState verfügbar ist die aktuelle Anfrage.

Nicht alle HttpHandlers bieten den Sitzungsstatus. Dazu muss der HttpHandler die Marker-Interfaces IRequiresSessionState oder IReadOnlySessionState [eins oder beide?] Implementieren.

HttpContext.Current.Session gibt einfach null zurück, wenn keine Sitzung verfügbar ist.

Die Implementierung der Session-Eigenschaft der HttpApplication löst eine HttpException aus, wobei der Nachrichtensitzungsstatus in diesem Kontext nicht verfügbar ist. anstatt eine Nullreferenz zurückzugeben. "

1
Steve G.

Intern zeigt Page.Session nur auf Es ist HttpContext.Current.Session, es gibt jedoch noch zwei Unterschiede, je nachdem, wo sie aufgerufen wird.

Auf Page.Session kann nur von Klassen zugegriffen werden, die von System.Web.UI.Page geerbt wurden, und es wird HttpException ausgelöst, wenn auf WebMethod zugegriffen wird.
Auf HttpContext.Current.Session kann von überall aus zugegriffen werden, solange Sie im Kontext einer Webanwendung ausgeführt werden. 


Ein weiterer wichtiger Unterschied, bei dem Sie auf Page.Session zugreifen können, aber nicht auf HttpContext.Current.Session: 

Wenn sich auf Ihrer Seite eine Methode namens GetData befindet (geerbt von System.Web.UI.Page), die in anderen Threads einer anderen Seitenmethode gleichzeitig ausgeführt wird, kann die GetData-Methode auf die Page.Seession zugreifen, aber Sie können nicht auf HttpContext.Current zugreifen .Session. 

Der Grund hierfür ist, dass GetData aus einem anderen Thread aufgerufen wurde. HttpContext.Current ist daher NULL und HttpContext.Current.Session löst eine NULL-Referenzausnahme aus. Page.Session wird jedoch weiterhin mit einem Seitenobjekt verknüpft, sodass die Seitenmethode GetData auf die Page.Session zugreifen kann.

0
Jay Shah