利用HttpModule开发asp.net页面、ashx等访问时session失效的统一处理入口
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了利用HttpModule开发asp.net页面、ashx等访问时session失效的统一处理入口,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2972字,纯文字阅读大概需要5分钟。
内容图文
web程序时,当使用session时总会出现失效而报“未将对象引用设置到对象的实例”的http 500错误,本人比较懒,不想每个地方都用try catch处理,就找到个用httpModule统一处理的方法:
1、新建一个_httpmodule的类,继承IHttpModule接口,为了能在类里面读取session,添加using System.Web.SessionState;,并继承IReadOnlySessionState接口;
2、添加application的AcquireRequestState处理:
void context_AcquireRequestState(object sender, EventArgs e) { HttpApplication application = (HttpApplication)sender; HttpContext context = application.Context; context_AcquireRequestState(context, new EventArgs()); } void context_AcquireRequestState(HttpContext context, EventArgs e) { try { if (!context.Request.Path.ToString().Contains("login.aspx")) { context.Session["loginUser"].ToString(); } } catch (Exception ex) { context.Response.Write("{‘error‘:false,‘message‘:‘尚未登录!‘}"); context.Response.End(); } }
3、添加init,里面注册AcquireRequestState事件:
public void Init(HttpApplication context) { context.AcquireRequestState += new EventHandler(context_AcquireRequestState); }
4、webconfig <system.web>节配置:
<httpModules> <add name="123" type="_httpmodule"/> </httpModules>
这样当session失效的时候放回错误信息,前台ajax处理返回Json即可。
ps:刚开始我将2、3注册成BeginRequest,可是总取不到Session中的用户信息, 搜索后发现一篇blog(http://www.cnblogs.com/junqilian/archive/2008/03/07/1095454.html),转载如下:
可是,别忙,怎么总取不到Session中的用户信息呢?记录访问日志用户Id这样的信息肯定是需要记录的啊!
后来放狗一搜才发现,还是对aspnet的事件处理流程不理解,Begin_Request时还没有加载Session状态呢,自然就取不到了。
下面是MSDN上提供的事件触发顺序:
在处理该请求时将由 HttpApplication 类执行以下事件。希望扩展 HttpApplication 类的开发人员尤其需要注意这些事件。
|
AcquireRequestState事件,当实际服务请求的处理程序获得与该请求关联的状态信息时发生。在这个事件发生时才能取到Session中是userId信息。BeginRequest事件在AcquireRequestState之前发生,我们把取Session状态的代码放在BeginRequest中肯定是取不到的。
问题找到了,把日志记录代码放在AcquireRequestState中就可以了,于是改成下面的样子:
public void Init(HttpApplication
context)
{
context.AcquireRequestState
+= new EventHandler(context_AcquireRequestState);
}
void
context_AcquireRequestState(object sender, EventArgs e)
{
//原先context_BeginRequest中的代码,不重复贴占地方了 :)
//把LogEntry中的信息保存到数据库
}
好了,这样我们继承了IHttpModule接口,实现了一个自定义的LogMudule,这样在用户方面每个页面时,都会自动记录用户的信息记如访问日志数据库中,再也不用到每个页面的Page_Load中去写了,维护起来也方便多了! Yeah~
原文:http://www.cnblogs.com/zhangxu724100/p/3526460.html
内容总结
以上是互联网集市为您收集整理的利用HttpModule开发asp.net页面、ashx等访问时session失效的统一处理入口全部内容,希望文章能够帮你解决利用HttpModule开发asp.net页面、ashx等访问时session失效的统一处理入口所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。