工作趣事 之 一般处理程序使用Session(个人亲身经历)


工作一个月了 接到一个任务

制作一个图库的网站 我用了一天的时间 设计了一下网站的各个功能  开始制作

一开始我做的是“登陆”和“注册”

这些感觉不怎么难 我定的目标是用一天的时间完成

注册的时候 有一个验证码 我先简单的介绍一下验证码的原理 我们在网上见到的验证码基本也是这样的原理:

1.根据要求 随机生成一个字符串 可以是只含有数字 也可以含有数字和字母
2.创建一个Session 将生成的字符串放在创建的Session中
3.最后 在后台中 将用户输入的验证码和Session中保存的验证码做比较 

如果相同 则说明用户输入的验证码正确 则 可以注册


我用生活中的一个例子来说一下:
您可以把Session当做成一个放东西的容器 将一个物品(随机生成的字符串)放在这个容器中
然后再拿来一个相同的物品(用户输入的验证码) 和容器中的物品比较


原理说明白了 说说我是怎么做的吧 
我在一般处理程序里面(.ashx)创建了随机数 ,创建的随机数的图片 并且 创建了Session
但是在.aspx文件中使用Session的时候 犯了一个特别幼稚的错误


先来看一下我在一般处理程序(.ashx)里面创建Session 并给Session赋值


再来看一下在.aspx中使用Session 和 报错信息



看到这里 也许您已经看出错误所在了 

对 我没有实现  IRequiresSessionState   接口


授人鱼不如授人以渔 我就来说说为什么一般处理程序(.ashx)要实现这个接口 而 .aspx却不用实现这个接口 直接拿来能用:

在.aspx文件中 微软以及帮我实现了IRequiresSessionState   在Reflector反编译器中 我们可以查看.aspx是怎么实现 IRequiresSessionState   接口的




而在一般处理程序里面(.ashx) 需要我们手动的实现 IRequiresSessionState   接口


在第9和第11个事件之间 有一个事件会接受浏览器发过来的SessionID 并根据值到服务器的Session池中找到对应的Session对象 将其引用赋值给当前页面上的Session对象

他先尝试将页面类对象转换成 IRequiresSessionState 接口 如果转换不成功 则不加载Session对象 
如果转换成功 则会从请求报文中拿到Cookie里的SessionID     最后在Session池中找到对应的Session对象 将引用赋值给当前页面的Session



话说回来 IRequiresSessionState 到底是什么什么接口 这么重要?

呵呵 他是一个标示接口 里面什么都没有 

知识标示了 当前页面中使用了Session




只要实现了这个接口 在一般处理程序里面 就可以自用的使用了!!!

这样的低级错误 以后我是再也不会犯了 希望这篇文章 能对大家有所帮助 

        关于Session的一些原理 大家可以看 ASP.Net原理篇 之 Session


由于个人能力有限 错误的地方还请您指出 以便我改进  万分感谢!!!



























  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值