您的位置:首页 > 理论基础 > 计算机网络

在ASP.NET中使用IHttpHandler处理请求(如自实现AJAX)时,无法获得Session(或者说是Session 为 null)的原因及解决方法

2011-04-07 20:32 1081 查看
先看这个帖子:



怎样在HttpModule捕获到session?

http://topic.csdn.net/u/20070226/10/9db317e8-0400-4d92-9c93-83a90d6bcde5.html



下面是MSDN上的解释:

IIS 5.0 和 6.0 的 ASP.NET 应用程序生命周期概述

http://msdn.microsoft.com/zh-cn/library/ms178473(v=vs.80).aspx



在处理该请求时将由 HttpApplication 类执行以下事件。希望扩展 HttpApplication 类的开发人员尤其需要注意这些事件。

对请求进行验证,将检查浏览器发送的信息,并确定其是否包含潜在恶意标记。有关更多信息,请参见 ValidateRequest脚本侵入概述

如果已在 Web.config 文件的 UrlMappingsSection 节中配置了任何 URL,则执行 URL 映射。

引发 BeginRequest 事件。

引发 AuthenticateRequest 事件。

引发 PostAuthenticateRequest 事件。

引发 AuthorizeRequest 事件。

引发 PostAuthorizeRequest 事件。

引发 ResolveRequestCache 事件。

引发 PostResolveRequestCache 事件。

根据所请求资源的文件扩展名(在应用程序的配置文件中映射),选择实现 IHttpHandler 的类,对请求进行处理。如果该请求针对从 Page类派生的对象(页),并且需要对该页进行编译,则 ASP.NET 会在创建该页的实例之前对其进行编译。

引发 PostMapRequestHandler 事件。

引发 AcquireRequestState 事件。

引发 PostAcquireRequestState 事件。

引发 PreRequestHandlerExecute 事件。

为该请求调用合适的 IHttpHandler 类的 ProcessRequest 方法(或异步版 BeginProcessRequest)。例如,如果该请求针对某页,则当前的页实例将处理该请求。

引发 PostRequestHandlerExecute 事件。

引发 ReleaseRequestState 事件。

引发 PostReleaseRequestState 事件。

如果定义了 Filter 属性,则执行响应筛选。

引发 UpdateRequestCache 事件。

引发 PostUpdateRequestCache 事件。

引发 EndRequest 事件。



在第10步就选择IHttpHandler,第12步生成HttpSessionState,第15步调用IHttpHandler 类的 ProcessRequest 方法。也就是说在IHttpHandler 类的 ProcessRequest 方法调用的时候HttpSessionState早就准备好了,但为什么得到的确实null呢?原因是没有给我们自己实现的这个IHttpHandler 类显示地标明“我们要使用Session”!



解决方法是:

让你写的实现IHttpHandler接口的类再实现一个IRequiresSessionState接口,这个接口嘛,什么都没有,但是确实会让你的实现了IHttpHandler的类能得到一个非null的HttpSessionState!

来看一下IRequiresSessionState接口的描述:

http://msdn.microsoft.com/zh-cn/library/system.web.sessionstate.irequiressessionstate.aspx

指定目标 HTTP 处理程序需要对会话状态值具有读写访问权。这是一个标记接口,没有任何方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐