一般处理程序使用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
只要實現了這個接口 在一般處理程序里面 就可以自用的使用了!!!
?
這樣的低級錯誤 以后我是再也不會犯了 希望這篇文章 能對大家有所幫助?
轉載于:https://www.cnblogs.com/alwayshere/p/4110031.html
總結
以上是生活随笔為你收集整理的一般处理程序使用Session报错(未将对象引用设置到对象实例)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDU 2087 (KMP不可重叠的匹配
- 下一篇: 谈IE的浏览器模式和文档模式