一般处理程序使用Session报错(未将对象引用设置到对象实例)
工作一個(gè)月了 接到一個(gè)任務(wù)
制作一個(gè)圖庫(kù)的網(wǎng)站 我用了一天的時(shí)間 設(shè)計(jì)了一下網(wǎng)站的各個(gè)功能 ?開始制作
一開始我做的是“登陸”和“注冊(cè)”
這些感覺(jué)不怎么難 我定的目標(biāo)是用一天的時(shí)間完成
注冊(cè)的時(shí)候 有一個(gè)驗(yàn)證碼 我先簡(jiǎn)單的介紹一下驗(yàn)證碼的原理 我們?cè)诰W(wǎng)上見到的驗(yàn)證碼基本也是這樣的原理:
1.根據(jù)要求 隨機(jī)生成一個(gè)字符串 可以是只含有數(shù)字 也可以含有數(shù)字和字母
2.創(chuàng)建一個(gè)Session 將生成的字符串放在創(chuàng)建的Session中
3.最后 在后臺(tái)中 將用戶輸入的驗(yàn)證碼和Session中保存的驗(yàn)證碼做比較?
如果相同 則說(shuō)明用戶輸入的驗(yàn)證碼正確 則 可以注冊(cè)
我用生活中的一個(gè)例子來(lái)說(shuō)一下:
您可以把Session當(dāng)做成一個(gè)放東西的容器 將一個(gè)物品(隨機(jī)生成的字符串)放在這個(gè)容器中
然后再拿來(lái)一個(gè)相同的物品(用戶輸入的驗(yàn)證碼) 和容器中的物品比較
原理說(shuō)明白了 說(shuō)說(shuō)我是怎么做的吧?
我在一般處理程序里面(.ashx)創(chuàng)建了隨機(jī)數(shù) ,創(chuàng)建的隨機(jī)數(shù)的圖片 并且 創(chuàng)建了Session
但是在.aspx文件中使用Session的時(shí)候 犯了一個(gè)特別幼稚的錯(cuò)誤
先來(lái)看一下我在一般處理程序(.ashx)里面創(chuàng)建Session 并給Session賦值
再來(lái)看一下在.aspx中使用Session 和 報(bào)錯(cuò)信息
看到這里 也許您已經(jīng)看出錯(cuò)誤所在了?
對(duì) 我沒(méi)有實(shí)現(xiàn) ?IRequiresSessionState ??接口
?
?
授人魚不如授人以漁 我就來(lái)說(shuō)說(shuō)為什么一般處理程序(.ashx)要實(shí)現(xiàn)這個(gè)接口 而 .aspx卻不用實(shí)現(xiàn)這個(gè)接口 直接拿來(lái)能用:
在.aspx文件中 微軟以及幫我實(shí)現(xiàn)了IRequiresSessionState ? 在Reflector反編譯器中 我們可以查看.aspx是怎么實(shí)現(xiàn)?IRequiresSessionState ? 接口的
而在一般處理程序里面(.ashx) 需要我們手動(dòng)的實(shí)現(xiàn)?IRequiresSessionState ? 接口
?
在第9和第11個(gè)事件之間 有一個(gè)事件會(huì)接受瀏覽器發(fā)過(guò)來(lái)的SessionID 并根據(jù)值到服務(wù)器的Session池中找到對(duì)應(yīng)的Session對(duì)象 將其引用賦值給當(dāng)前頁(yè)面上的Session對(duì)象
他先嘗試將頁(yè)面類對(duì)象轉(zhuǎn)換成 IRequiresSessionState 接口 如果轉(zhuǎn)換不成功 則不加載Session對(duì)象?
如果轉(zhuǎn)換成功 則會(huì)從請(qǐng)求報(bào)文中拿到Cookie里的SessionID ? ? 最后在Session池中找到對(duì)應(yīng)的Session對(duì)象 將引用賦值給當(dāng)前頁(yè)面的Session
?
話說(shuō)回來(lái) IRequiresSessionState 到底是什么什么接口 這么重要?
呵呵 他是一個(gè)標(biāo)示接口 里面什么都沒(méi)有?
知識(shí)標(biāo)示了 當(dāng)前頁(yè)面中使用了Session
只要實(shí)現(xiàn)了這個(gè)接口 在一般處理程序里面 就可以自用的使用了!!!
?
這樣的低級(jí)錯(cuò)誤 以后我是再也不會(huì)犯了 希望這篇文章 能對(duì)大家有所幫助?
轉(zhuǎn)載于:https://www.cnblogs.com/alwayshere/p/4110031.html
總結(jié)
以上是生活随笔為你收集整理的一般处理程序使用Session报错(未将对象引用设置到对象实例)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: HDU 2087 (KMP不可重叠的匹配
- 下一篇: 谈IE的浏览器模式和文档模式