这两个HttpContext.Current.Session和Session – asp.net 4.0有什么区别

这两段代码有什么区别。

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

asp.net 4.0和C#4.0

它们实际上是相同的,因为它们将访问相同的Session数据。

您可以在代码隐藏中调用Session的原因是因为ASP.Net页面默认扩展System.Web.UI.Page类型。 这有一个Session公共属性。 如果你在Reflector中查看代码,你可以看到它只是调用HttpContext.Current.Session本身(通过它自己的Context属性)。

在其他类中,您将无权访问该属性,但只要您在Web应用程序的上下文中运行,就可以使用HttpContext.Current.Session来访问会话数据。

在一个标准情况下,他们是相同的。 不同之处在于第一个语句也适用于静态上下文,例如WebMethod。

它们是有区别的。 第二个( Session )是许多.NET对象的属性,例如Page 。 因此,您无法在这些对象的构造函数中访问它。 但是,第一个( HttpContext.Current.Session )始终准备就绪并且随时可用(当然,在会话加载到请求处理管道中之后)。

没有区别。 Page.Session返回HttpContext.Current.Session

话虽如此,我写了.dll作为Web应用程序的扩展。 这些.dll没有Session概念。 在这些实例中,我可以通过引用HttpContext.Current.Session来访问使用我的.dll的Web应用程序的当前会话。

没有区别。 他们是一样的东西; 第二种forms更短:)

行为没有区别。 如果您在自定义类中使用HttpContext不能直接使用的代码并且想要访问会话值而不是我们使用第一行代码,而在访问Page或控件类时使用第二行。

Nicholas Carey的另一个非常彻底的答案https://stackoverflow.com/a/6021261/365017

“HttpApplication的Session属性表现出与比例HttpContext.Current.Session不同的行为。如果一个HttpSessionState实例可用,它们都将返回对同一个HttpSessionState实例的引用。当没有HttpSessionState的实例可用时,它们的作用不同当前的要求。

并非所有HttpHandler都提供会话状态。 为此,HttpHandler必须实现[一个或两个?]标记接口IRequiresSessionState或IReadOnlySessionState。

如果没有可用的会话,HttpContext.Current.Session只返回null。

HttpApplication的Session属性实现抛出一个HttpException,并在此上下文中提供消息Session state。 而不是返回一个空引用。“