HttpContext.Current.Session["myvariable"] Session["myvariable"]
他们具有相同的作用,他们将会访问相同的session数据。在你的code-behind代码中之所以能够调用session,是因为Asp.net的页面默认是继承自system.web.ui.page类型的。这个类型有一个名字为session的公共属性。如果你在Reflector反编译软件中查看这个公共属性的代码,你会看到这个属性自己仅仅是调用的httpcontext.current.session而已。(在他自己的 Context属性中也全部是这样使用的)
在其他的类中,你可能不可以直接访问system.web.ui.page的session属性,但是你能够用httpcontext.current.session来访问session数据,只要你的代码正运行在一个web应用程序的上下文中。
在标准场景中,他们是相同的,不同之处在于在静态方法中例如WebMethod中,HttpContext.Current.Session依然可用.Session是NET的Page对象的属性.因此,例如,在这些非page对象的构造函数中,您无法访问它。 然而,第一个(HttpContext.Current.Session)总是准备好并随时可用的(当然,在会话加载到请求处理流水线之后)。
还有一个区别,就是Session属性表现出的行为与HttpContext.Current.Session不同,当会话不存在时HttpContect.Current.Session将返回null,而Page.Session将抛出HttpException异常