HttpHandler中Session的用法

   通常我们经常,通过session判定用户是否登录。还有一些临时的、重要的数据也尝尝存放在Session中。

在页面我们很容易的得到Session的值,但在类中就会遇到一些问题。也知道通过下面的方法得到。

System.Web.HttpContext.Current.Session[ " userinfo "];

  但是今天此种方法也失灵了。在做一个小应用时,需要实现IHttpHandler,同时也需要用到用户的标识。但是在这个类中怎么也不能找到Session的值,曝出System.Web.HttpContext.Current.Session为null

 

解决方法:

  在实现IHttpHandler的同时,也要实现IRequiresSessionState接口,其命名空间为:System.Web.SessionState。

public class WatermarkHandler : IHttpHandler, System.Web.SessionState.IRequiresSessionState{ dot.gif}

  IRequiresSessionState

  指定目标 HTTP 处理程序需要对会话状态值具有读写访问权。这是一个标记接口,没有任何方法。

  作用:

在自定义 HTTP 处理程序中实现 IRequiresSessionState 接口,以确定处理程序是否需要对会话状态值具有读写访问权
  

自定义HTTPHANDLER 中使用SESSION 的方法

  1、先引用System.Web.SessionState 这个命名空间,

  2、如果是要在HttpHandler 中读取Session的内容,就要在实现IHttpHandler 的类中同时实现IReadOnlySessionState 这个接口。

  3、如果是要在HttpHandler 中读写Session的内容,就要在实现IHttpHandler 的类中同时实现IRequiresSessionState

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

实例:

using System.Web.SessionState;

namespace TzBlog.HttpHandler
{
/// <summary>
/// CheckLoginHttpHandler 的摘要说明。
/// </summary>
public class CheckLoginHttpHandler:IHttpHandler,IReadOnlySessionState,IRequiresSessionState
{
 public void ProcessRequest (HttpContext context)
  {
   }

  /// <summary>
  /// 获取一个值,该值指示其他请求是否可以使用 IHttpHandler 实例。
  /// </summary>
  public bool IsReusable
  {
   get
   {
    return false;
   }
  }

}

}

这个是只读的,如果要取消只读的话只要去掉IReadOnlySessionState接口的定义就可以了的





你可能感兴趣的:(session,HttpHandler)