在Handler中使用Session

来源:互联网 发布:将字符串转换为json 编辑:程序博客网 时间:2024/04/30 03:42
 在Handler中使用Session的时候是从HttpContext中去取的,那么用Reflector直接去找到HttpContext,看他是如何做到的,把整个类用Reflector Disassembler出来,直接搜索关键字IRequiresSessionState

 非常关键的代码 this._handler is IRequiresSessionState 和 this._handler is IReadOnlySessionState ,我们再看关于IRequiresSessionState的说明:指定目标 HTTP 处理程序需要对会话状态值具有读写访问权。而this.RequiresSessionState和this.ReadOnlySessionState默认都是false的,也就是说默认是不能访问Session的数据,当你继承IRequiresSessionState或IReadOnlySessionState之后访问权被打开!至于在哪里打开,有兴趣的朋友可以继续深究一下,在SessionStateModule这个类里面有更深入的答案,他是通过访问这个类的属性来判断是否需要打开Session的访问权的。

  public IHttpHandler Handler
        {
            get
            {
                return this._handler;
            }
            set
            {
                this._handler = value;
                this.RequiresSessionState = false;
                this.ReadOnlySessionState = false;
                this.InAspCompatMode = false;
                if (this._handler != null)
                {
                    if (this._handler is IRequiresSessionState)
                    {
                        this.RequiresSessionState = true;
                    }
                    if (this._handler is IReadOnlySessionState)
                    {
                        this.ReadOnlySessionState = true;
                    }
                    Page page = this._handler as Page;
                    if ((page != null) && page.IsInAspCompatMode)
                    {
                        this.InAspCompatMode = true;
                    }
                }
            }
        }
0 0
原创粉丝点击