ASP.NET的ASHX一般处理程序中Session为null且不能赋值

ASP.NET的ASHX一般处理程序中遇到Session为null的问题,可通过让类继承IRequiresSessionState接口来解决。本文提供示例代码和问题分析,帮助开发者在自定义HTTP Handler中正常使用Session。

         做jquery的时候,在登录模块中死活不能保存管理员名称到Session,这里归结一句话:让你的ashx文件多继承一个IRequiresSessionState即可搞定!

ASP.NET的ASHX一般处理程序中Session不能赋值,Session为Null的处理办法,示例代码如下:

01usingSystem;
02usingSystem.Collections.Generic;
03usingSystem.Linq;
04usingSystem.Web;
05usingSystem.Web.SessionState;
06namespaceWeb.Admin.ashx
07{
08/// <summary>
09/// Admin远程服务
10/// 处理管理员的登录与退出操作
11/// </summary>
12public class AdmLog : IHttpHandler, IRequiresSessionState
13{
14publicvoidProcessRequest(HttpContext context)
15{
16context.Response.ContentType = "text/plain";
17stringadmName = context.Request["txtName"].Trim(); //获取用户输入的登录名
18stringadmPwd = ZXL.MD5.GetMD5String("PWD"+ context.Request["txtPwd"]); //根据用户的输入密码得到MD5加密码
19Maticsoft.Model.tb_Admin adm = newMaticsoft.BLL.tb_Admin().GetModel(admName);
20if(adm != null)
21{
22if(admPwd.Equals(adm.aPassword))
23{
24System.Web.HttpContext.Current.Session["Admin"] = adm.aName; //保存管理员名称到Session会话
25context.Response.Write("{success:true}");
26context.Response.End();
27}
28}
29context.Response.Write("{success:false,msg:'您输入的登录名或密码错误 ! '}");
30}
31 
32publicboolIsReusable
33{
34get
35{
36returnfalse;
37}
38}
39}
40}

特别注意:上面只修改了一处,即public class AdmLog : IHttpHandler, IRequiresSessionState{} 让你的ashx一般处理程序文件多继承了IRequiresSessionState。

解决问题后的一点儿分析:

分析摘自“第一滴泪”的新浪博客。http://blog.sina.com.cn/s/blog_4a8009260100e347.html 谢谢~~~~

一.问题描述:

最近需要做一个对特定请求(.report)进行响应的接口,当然是使用实现IHttpHandler来进行处理,实现IHttpHandler接口就必须要实现它的两个方法,ProcessRequest(HttpContext context) 和IsRunable() ,看到在ProcessRequest(HttpContext context) 中有个HttpContext的输入参数,以为通过这个就可以对所有的服务器对象进行使用。不过问题出现了,在这个自定义HTTP响应处理类中,对于Request和Response都可以通过使用HttpContext来引用使用,不过Session 就是不行,总是出现对象未进行引用的错误!

二.解决办法:

通过上网查资料,却无意中发现在自定义HTTPHANDLER中使用SESSION 的方法!
1、先引用System.Web.SessionState这个命名空间,
2、如果是要在HttpHandler中读取Session的内容,就要在实现IHttpHandler的类中同时实现IReadOnlySessionState这个接口。
3、如果是要在HttpHandler中读写Session的内容,就要在实现IHttpHandler的类中同时实现IRequiresSessionState

这样就可以在自定义的HttpHandler 中正常的使用Session了。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值