Asp.net 何时';我最早能访问global.asax中的会话数据是什么?

Asp.net 何时';我最早能访问global.asax中的会话数据是什么?,asp.net,session,global-asax,Asp.net,Session,Global Asax,我想在my global.asax中检查会话是否包含一些键/值数据。我不确定最早的检查时间(和方法名)是什么时候 谢谢:)根据,global.asax中可以访问会话对象的最早事件是global.asax触发会话\u启动事件时 会话\uu启动:当新用户访问应用程序网站时触发。 会话结束:当用户的会话超时、结束或离开应用程序网站时触发 您需要使用BeginRequest(),因为它是在HttpApplication对象(Global.asax继承)上触发的第一个事件 您将在此处看到有关ASP.NET

我想在my global.asax中检查会话是否包含一些键/值数据。我不确定最早的检查时间(和方法名)是什么时候

谢谢:)

根据,global.asax中可以访问会话对象的最早事件是global.asax触发会话\u启动事件时

会话\uu启动:当新用户访问应用程序网站时触发。
会话结束:当用户的会话超时、结束或离开应用程序网站时触发


您需要使用
BeginRequest
(),因为它是在
HttpApplication
对象(Global.asax继承)上触发的第一个事件


您将在此处看到有关ASP.NET应用程序生命周期的更多信息-(这是针对IIS 5和IIS 6的)。

我一直认为
Application\u AcquisiteRequestState
是Global.asax中可以访问当前会话的第一个事件。它肯定不是
应用程序\u BeginRequest

随意提到会话状态是在应用程序\u PostAcquireRequestState事件期间获取的。我希望能在页面上重述一遍


您可以访问的最新会话状态位于Application_PostRequestHandlerExecute中,因为它在下一个事件期间由SessionStateModule保存。

这些状态仅在有人第一次访问站点时触发,而不是在每个请求期间。它可能是HttpApplication对象上触发的第一个事件,但会话是否已反序列化,到那时?根据生命周期,HttpContext已经创建,HttpSessionState是HttpContext的一个属性。显然,这个答案是不正确的,因为这个答案不起作用。使用@ddc0660提供的一个:相关的/某种程度上的副本:如果请求符合ASP.Net管道,这实际上使会话在MVC3和4以及IIS7和8中可用;例如,如果请求的是控制器或网页,则会话可用。但是,如果是图像、css文件等,在大多数配置中,会话都不可用,甚至不返回null-只要尝试访问它就会得到一个HttpException。我知道这个答案非常古老,但我搜索了相同的答案。我发现了一些附加信息:在处理程序执行请求之前,Application_acquisitequeststate是获取会话的正确位置。如果您想知道会话是否可用,请检查Context.session是否为null。这不会引发异常,在您知道之后,您可以使用变量会话访问该会话。我遇到了一个问题,应用程序中的会话仍然为null。只有当请求的处理程序实现IRequiresessionState时,会话才会启动。如果无法更改处理程序,但仍需要会话,则可以调用“Context.SetSessionStateBehavior(SessionStateBehavior.Required);”在应用程序中,_BeginRequest强制生成会话。AcquisiteRequestState也具有可用性;使用PostAcquireRequestState不会阻止会话对图像、css文件等的请求引发异常。