求助:HttpModule中读不到Session

mysugar 2007-10-26 11:36:10
我的HttpModule类已实现接口IHttpModule,IRequiresSessionState,web.config文件httpModules节点也已配置好,但是调试和运行时提示:System.NullReferenceException: 未将对象引用设置到对象的实例,我发现HttpContext.Current.Session这个是null,请教各位大侠,谢谢!简短代码如下:

public class HttpModuleBLL : IHttpModule,IRequiresSessionState
{
public void Init(HttpApplication application)
{
application.BeginRequest += new EventHandler(application_BeginRequest);
}
private void application_BeginRequest(object sender, EventArgs e)
{
string domain = "www";
HttpApplication application = (HttpApplication)sender;
//if这里错了,HttpContext.Current.Session==null
if (HttpContext.Current.Session["domain"] == null || HttpContext.Current.Session["domain"].ToString() != "www")
{
HttpContext.Current.Session["domain"] = domain;
//其他代码
}
}


public void Dispose()
{
throw new NotImplementedException();
}
}
...全文
437 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangpinguknow 2012-04-16
  • 打赏
  • 举报
回复
你那个写法有个问题,就是如果用户正在访问(已经写过cookie)的时候回收IIS.将导致有cookie没session的情况.会报错崩溃的。
事件的执行顺序 如下:
在处理该请求时将由 HttpApplication 类执行以下事件。希望扩展 HttpApplication 类的开发人员尤其需要注意这些事件。

1.对请求进行验证,将检查浏览器发送的信息,并确定其是否包含潜在恶意标记。有关更多信息,请参见 ValidateRequest 和脚本侵入概述。
2.如果已在 Web.config 文件的 UrlMappingsSection 节中配置了任何 URL,则执行 URL 映射。
3.引发 BeginRequest 事件。
4.引发 AuthenticateRequest 事件。
5.引发 PostAuthenticateRequest 事件。
6.引发 AuthorizeRequest 事件。
7.引发 PostAuthorizeRequest 事件。
8.引发 ResolveRequestCache 事件。
9.引发 PostResolveRequestCache 事件。
10.根据所请求资源的文件扩展名(在应用程序的配置文件中映射),选择实现 IHttpHandler 的类,对请求进行处理。如果该请求针对从 Page 类派生的对象(页),并且需要对该页进行编译,则 ASP.NET 会在创建该页的实     例之前对其进行编译。
11.引发 PostMapRequestHandler 事件。
12.引发 AcquireRequestState 事件。
13.引发 PostAcquireRequestState 事件。
14.引发 PreRequestHandlerExecute 事件。
15.为该请求调用合适的 IHttpHandler 类的 ProcessRequest 方法(或异步版 BeginProcessRequest)。例如,如果该请求针对某页,则当前的页实例将处理该请求。
16.引发 PostRequestHandlerExecute 事件。
17.引发 ReleaseRequestState 事件。
18.引发 PostReleaseRequestState 事件。
19.如果定义了 Filter 属性,则执行响应筛选。
20.引发 UpdateRequestCache 事件。
21.引发 PostUpdateRequestCache 事件。
22.引发 EndRequest 事件。

*:AcquireRequestState事件,当实际服务请求的处理程序获得与该请求关联的状态信息时发生。在这个事件发生时才能取到Session中是x信息。

BeginRequest事件在AcquireRequestState之前发生,我们把取Session状态的代码放在BeginRequest中肯定是取不到的。

因此将以上代码放在AcquireRequestState事件里,应该是可行的
liuming621 2010-08-27
  • 打赏
  • 举报
回复
AcquireRequestState、PreRequestHandlerExecute
  • 打赏
  • 举报
回复
还是在 AcquireRequestState、PreRequestHandlerExecute 这两个方法里面可以用,解决问题了。
fw18696696 2009-01-14
  • 打赏
  • 举报
回复
我的不太好用呢
mysugar 2007-10-26
  • 打赏
  • 举报
回复
经测试,可以在AcquireRequestState、PreRequestHandlerExecute事件中处理Session,谢谢NewUser2008,过几天给分。
mysugar 2007-10-26
  • 打赏
  • 举报
回复
那应该在哪个事件中处理?我在ReleaseRequestState、EndRequest事件中都试过了,读取不到Session,暂时放在Global.asax的Session_Start事件中处理。
NewUser2008 2007-10-26
  • 打赏
  • 举报
回复
Session事件还没有开始,要使用Session则要等事件开始后才可以用

110,546

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧