ASP.NET-Session cooike
Application?、Cookie和?Session?兩種會(huì)話有什么不同
答:Application是用來存取整個(gè)網(wǎng)站全局的信息,而Session是用來存取與具體某個(gè)訪問者關(guān)聯(lián)的信息,?Session是保存在服務(wù)器端的,比較安全,可以放大數(shù)據(jù)。Cookie是保存在客戶端的,機(jī)密信息不能保存在Cookie中,只能放小數(shù)據(jù);
?
?
Session不要放過多的信息,由于IIS的問題,有可能會(huì)丟Session的信息(IIS在負(fù)載高的時(shí)候,會(huì)丟失Session的信息)
session是用于頁面間傳值用的
??
關(guān)于SessionID ? ??
Session是由應(yīng)用服務(wù)器維持的一個(gè)服務(wù)器端的存儲(chǔ)空間,用戶在連接服務(wù)器的時(shí)候,會(huì)由服務(wù)器生成一個(gè)唯一的sessionId,用該sessionId為標(biāo)識(shí)符來存取服務(wù)端的session存儲(chǔ)空間,而sessionId’這一數(shù)據(jù)則是保存到客戶端,用cookie保存的,用戶提交頁面的時(shí)候,會(huì)將這一sessionId提交到服務(wù)器端,來存取session數(shù)據(jù),服務(wù)器也可以通過URL重寫的方式來傳遞sessionId的值,不是完全依賴于cookie。
?
?
Session有什么重大BUG,微軟提出了什么方法加以解決?(常考)
iis中由于有進(jìn)程回收機(jī)制,系統(tǒng)繁忙的話Session會(huì)丟失,IIS重啟也會(huì)造成Session丟失。這樣用戶就要重新登錄或者重新添加購物車、驗(yàn)證碼等放到Session中的信息。可以用State??server或SQL?Server數(shù)據(jù)庫的方式存儲(chǔ)Session不過這種方式比較慢,而且無法捕獲Session的END事件。但是(一定要寫上,這樣才夠拽)我認(rèn)為這不是Bug,只能說是In-Proc方式存儲(chǔ)Session的缺陷,缺陷是和Bug不一樣的,In-Proc方式存儲(chǔ)Session會(huì)由服務(wù)器來決定什么時(shí)候釋放Session,這是By?Design,In-Proc方式不滿足要求的話完全可以用StateServer和數(shù)據(jù)庫的方式。
?
?
?? ?? 相信幾乎所有學(xué)過asp.net的朋友都遇到過這個(gè)問題:未將對象引用設(shè)置到對象的實(shí)例。這個(gè)問題在我剛開始學(xué)習(xí)這方面的知識(shí)的時(shí)候真有點(diǎn)讓崩潰的感覺,當(dāng)時(shí)都快打擊死我了,不過經(jīng)過了以后,反而有一種明朗的小激動(dòng),呵呵,問題是進(jìn)步的階梯,此乃真理。下面,就來看一下到底都有哪些原因會(huì)造成這個(gè)問題的出現(xiàn)(這里有我自己遇到的問題,也有在網(wǎng)上查閱的資料)
一、數(shù)據(jù)庫方面?
1、ViewState 對象為Null。
2、DateSet 空。
3、sql語句或Datebase的原因?qū)е翫ataReader空。
4、聲明字符串變量時(shí)未賦空值就應(yīng)用變量。
5、未用new初始化對象。
6、Session對象為空。
7、對控件賦文本值時(shí),值不存在。
8、使用Request.QueryString()時(shí),所獲取的對象不存在,或在值為空時(shí)未賦初始值。
9、使用FindControl時(shí),控件不存在卻沒有做預(yù)處理。
10、重復(fù)定義造成未將對象引用設(shè)置到對象的實(shí)例錯(cuò)誤.
?
二、應(yīng)用程序方面
?
?????(1)所設(shè)置的變量為空值或沒有取到值,一般出現(xiàn)在傳遞參數(shù)的時(shí)候出現(xiàn)這個(gè)問題,也會(huì)在使用DataGrid或gridview或datalist等數(shù)據(jù)控件時(shí)出現(xiàn).
(2)控件名稱與codebehind里面的沒有對應(yīng)?
(3)未用new初始化對象?
(4)在程序中所引用的控件不存在?
解決方法:?
(1)使用try..catch...finally捕捉錯(cuò)誤,或直接用response.write()輸出所取的變量值
(2)查看代碼中是否存在未初始化的變量?
三、數(shù)據(jù)庫連接
?
SqlConnection.Open?? 未將對象引用設(shè)置到對象的實(shí)例?
在使用VS2003開發(fā) ASP.NET程序時(shí)候 有時(shí)候操作 SqlConnection對象的Open()方法時(shí)候會(huì)出現(xiàn)
未將對象引用設(shè)置到對象的實(shí)例。?
說明: 執(zhí)行當(dāng)前 Web 請求期間,出現(xiàn)未處理的異常。請檢查堆棧跟蹤信息,以了解有關(guān)該錯(cuò)誤以及代碼中導(dǎo)致錯(cuò)誤的出處的詳細(xì)信息。
異常詳細(xì)信息:System.NullReferenceException: 未將對象引用設(shè)置到對象的實(shí)例。
源錯(cuò)誤:
。。。。?
conn.Open();?
......?
跟蹤調(diào)試也肯定可以確定 對conn進(jìn)行new 操作 但是程序經(jīng)常在這個(gè)地方報(bào)錯(cuò),但是有時(shí)候重啟服務(wù)器或者重啟IIS有能正常使用了。 怎么調(diào)試也找不到問題? 那么這個(gè)時(shí)候可能是你本機(jī)上安裝的.NET FRAMEEWORK 框架有問題,可能沒有沒有安裝SP1.1補(bǔ)丁?
需要打NETFRAMEEWORK1.1 SP1的補(bǔ)丁,到微軟官方網(wǎng)站下載安裝后就好了。?
四、一般出現(xiàn)NullReferenceException異常的情況:
1、對象所在的命名空間沒有引用
2、對象沒有實(shí)例化
3、出現(xiàn)異常,實(shí)例化失敗對象為 null
?
五、IIS 扛不住的時(shí)候,也會(huì)出現(xiàn)上面的錯(cuò)誤。
當(dāng)應(yīng)用程序的用戶訪問量超過它能承受的范圍之后,就會(huì)出錯(cuò)。
改善你的程序,使用緩存,盡量減少與數(shù)據(jù)庫交互的次數(shù)。
?
六、查看是否重置了DataSet引用
請大家好好查查自己的代碼,是不是在其他地方重新引用了,在DataSet被設(shè)置成全局對象也會(huì)出現(xiàn)這種錯(cuò)誤提示。
?
七、最后
甚至,僅僅因?yàn)榫W(wǎng)站里面DAL的dll文件失效,業(yè)務(wù)層實(shí)例化不了IDAL里面的對象也會(huì)出錯(cuò)。
當(dāng)你發(fā)現(xiàn)所有的方法不行時(shí),打上.netframework的補(bǔ)丁
總結(jié)
??????? 暫時(shí)就這么多了吧,雖然錯(cuò)誤的表現(xiàn)形式大致相同,但是其原因卻是五花八門,學(xué)習(xí)就要像中醫(yī)一樣,治標(biāo)更要治本,學(xué)習(xí)要知其然還要知其所以然。
?
要么放在pageload里面
?
?
在html中嵌入C#的代碼,直接使用<% c#代碼?%>就行了?
?
要么在頁面跳轉(zhuǎn)前把值賦給變量就行了
有form的,需要把調(diào)整form的action地址,下一步才去找onclick等事件的地址
沒有form包含的,直接去按鈕中找onclick事件的地址
會(huì)話變量通過存儲(chǔ)在
HttpContext.Session屬性公開的
SessionStateItemCollection對象中。
通過HTML隱藏控件也可以實(shí)現(xiàn)頁面間值的傳遞,但是比較麻煩,還是session比較方便
?
不同瀏覽器會(huì)產(chǎn)生新的會(huì)話,因?yàn)閟ession是根據(jù)發(fā)給瀏覽器的cookie來產(chǎn)生的,不同瀏覽器的cookie不一樣
下面的這種寫法是沒有冒號(hào)的,注意!!
?
?
?
?
?
?
附件列表
- QQ截圖20151213150752.png
?
轉(zhuǎn)載于:https://www.cnblogs.com/weloveshare/p/5300059.html
總結(jié)
以上是生活随笔為你收集整理的ASP.NET-Session cooike的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 发布ccnet的步骤
- 下一篇: 设计模式之装饰模式的学习