IHttpHandler中使用Session实现原理[ASP.NET | IHttpHandler |IRequiresSessionState]

简介:

在Handler中使用Session的时候是从HttpContext中去取的,那么用Reflector直接去找到HttpContext,看他是如何做到的,把整个类用Reflector Disassembler出来,直接搜索关键字IRequiresSessionState,整个类里面只搜到一个,位置是1157行,下面我把代码一贴大家就明白了:

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 ;
                    }
                }
            }
        }

      代码说明:

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

结束

     写这篇文章的目的有两个:

          1.     不明白的时候一定要问为什么,不仅如此还是努力尽所能的深究一下。

          2.     学习一下这正模式,虽然不知道是哪条设计模式,但是如果是我的话我可能会写一个abstract来实现这样的功能。

     友情提示:至于Handler的实现可以参考HttpApplication的源代码。

本文转自博客园农民伯伯的博客,原文链接:IHttpHandler中使用Session实现原理[ASP.NET | IHttpHandler |IRequiresSessionState],如需转载请自行联系原博主。

目录
相关文章
|
6月前
|
存储 开发框架 NoSQL
ASP.NET WEB——项目中Cookie与Session的用法
ASP.NET WEB——项目中Cookie与Session的用法
88 0
|
6月前
|
开发框架 .NET
ASP.NET Core NET7 增加session的方法
ASP.NET Core NET7 增加session的方法
88 0
|
5月前
|
存储 开发框架 .NET
ASP.NET Session的认识和解释
ASP.NET Session的认识和解释
40 1
|
开发框架 JavaScript .NET
Asp.Net Core中Session使用
Asp.Net Core中Session使用
142 0
|
缓存 前端开发 API
.Net WebApi中使用Session使用
.Net WebApi中使用Session使用
303 0
|
存储 开发框架 .NET
ASP.NET中利用Application和Session统计在线人数、历史访问量
先来简单说一下ASP.NET中的Application和Session 下图是我们非常熟悉的Web应用程序的结构:
ASP.NET中利用Application和Session统计在线人数、历史访问量
|
存储 中间件 .NET
ASP.NET Core Web Api之JWT VS Session VS Cookie(二)
ASP.NET Core Web Api之JWT VS Session VS Cookie(二)前言本文我们来探讨下JWT VS Session的问题,这个问题本没有过多的去思考,看到评论讨论太激烈,就花了一点时间去研究和总结,顺便说一句,这就是写博客的好处,一篇博客写出有的可能是经验积累,有的可能是学习分享,但都逃不过看到文章的你有更多或更好的想法,往返交流自身能收获更多,何乐而不为呢?希望本文能解惑或者能得到更多的交流。
2907 0
|
存储 安全 .NET
ASP.NET WebApi 基于分布式Session方式实现Token签名认证(发布版)
一、课程介绍 明人不说暗话,跟着阿笨一起学玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性。那么对于我们来说,如何确保数据的安全将会是需要思考的问题。在ASP.NETWebService服务中可以通过SoapHead验证机制来实现,那么在ASP.NET WebApi中我们应该如何保证我们的接口安全呢?如果您对本次分享课程《ASP.NET WebApi 基于分布式Session方式实现Token签名认证》感兴趣的话,那么请跟踪阿笨一起学习吧。
2597 0
.NET Core Session的简单使用
前言 在之前的.NET 里,我们可以很容易的使用Session读取值。那今天我们来看看 如何在.NET Core中读取Session值呢? Session 使用Session之前,我们需要到Startup.
2105 0