li.的博客
li.的首页 > li.的博客 > 浏览文章

ashx的Session操作(如何在ashx页面设置和获取Session值)

分类:.net应用  人气:5502  评论:0  时间:2010-10-26 09:46

ashx文件要使用Session,必须实现Session接口,虽然这是个空接口;
using System;
using System.Web;
using System.Web.SessionState; //第一步:导入此命名空间

public class checkCookie : IHttpHandler ,IRequiresSessionState //第二步:实现接口 到此就可以像平时一样用Session了
{
   
  public void ProcessRequest (HttpContext context)
{

……

=================================================

最近做一个项目,有使用Ajax调用ashx文件 ,其中ashx文件里面有用到Session,但是总无法获取Session,经过调试,出现的错误的原因: 大体如下 Session["loginName"]为空,无法toString(); context.Session["Id"] “context.Session”引发了“System.NullReferenceException”类型的异常 base {System.SystemException}: {"该方法的指针为空。"} 查阅MSDN得到ashx文件要使用Session,必须实现Session接口; using System; using System.Web; using System.Web.SessionState; //第一步:导入此命名空间 public class checkCookie : IHttpHandler ,IRequiresSessionState //第二步:实现接口 到此就可以像平时一样用Session了 { public void ProcessRequest (HttpContext context) { //------------ }


================================================

IRequiresSessionState 接口最关键了

一定要继承接口之后才能用session

================================================

在一般事务处理页面,可以轻松的得到 Request,Response对象,从而进行相应的操作,如下:

HttpRequest Request = context.Request; 

HttpResponse Response = context.Response;

但是要得到 Session的值就没有那么简单了。比如你要在ashx得到保存在Session中的登录帐号Session["userAccount"]

如果你只是context.Session["userAccount"]的话是会报 “未将对象引用设置到对象的实例”的异常

所以,如果要想取Session中的值 ,需要如下所示

1、引入 命名空间:

using System.Web.SessionState;

2、实现IRequiresSessionState接口,具体如下  

    /// <summary>
    /// $codebehindclassname$ 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class AddUserInfo : IHttpHandler,IRequiresSessionState //就是这样显示的实现一下,不用实现什么方法
    {

        public void ProcessRequest(HttpContext context)
        {

      //...

       //这样你就可以如下 操作了

                if(context.Session["userAccount"] != null)

      {

        string account = context.Session["userAccount"].ToString();

      }

      //...继续下面的代码

    }

  }

评论(0)
暂无评论
我来评论
(800字以内)