我們知道web網(wǎng)站在客戶端存儲(chǔ)數(shù)據(jù)有三種形式:1. Cookie 2. hidden(隱藏域) 3.QueryString 其中viewstate什么的都是通過(guò)第二種方式隱藏域存儲(chǔ)滴。
客戶端存儲(chǔ)數(shù)據(jù)有三種形式,那服務(wù)器端有幾種呢? 嘿嘿 服務(wù)器端有:1. Session 2. Application 3. database 4. caching(緩存) 其中session用的較多,當(dāng)然數(shù)據(jù)庫(kù)是必須的。
好了今天的主角是cookie(小甜餅)先看下cookie存在哪吧!首先,打開(kāi)運(yùn)行對(duì)話框輸入cookies會(huì)打開(kāi)一個(gè)文件夾沒(méi)錯(cuò)這就是存儲(chǔ)cookies的地方(聲明:這里只是存儲(chǔ)的IE瀏覽器的cookies,什么谷歌、火狐什么的存在他們所對(duì)應(yīng)瀏覽器的安裝目錄中)。
先看一下怎么新建一個(gè)cookie吧!
HttpCookie cookie = new HttpCookie("userName"); cookie.Value = userName; cookie.Expires = DateTime.Now.AddHours(2); Response.Cookies.Add(cookie);
第一行:創(chuàng)建一個(gè)HttpCookie對(duì)象,然后構(gòu)造函數(shù) 給個(gè)cookie名稱(chēng)
第二行:給這個(gè)cookie賦值---->因?yàn)閏ookie是以鍵值對(duì)存儲(chǔ)的 ex:userName = “admin”
第三行:設(shè)置此cookie的失效時(shí)間,此值是一個(gè)具體的失效時(shí)間datetime類(lèi)型 上面是設(shè)置兩個(gè)小時(shí)后失效
第四行:將cookie寫(xiě)到cookie中,即寫(xiě)在響應(yīng)報(bào)文頭中一會(huì)分析原理的時(shí)候會(huì)講到。
行設(shè)置了cookice了那我怎么讀它呢?廢話少說(shuō)上代碼
Request.Cookies["userName"].Value
呵呵,是不是很簡(jiǎn)單,就是在請(qǐng)求中有個(gè)Cookices集合然后通過(guò)索引的方式訪問(wèn)他---->把它比較成Request.Form["....."] 這句是不是經(jīng)常使。
好了會(huì)創(chuàng)建了也會(huì)獲得了 那咱下面就分析一下原理
大家想下服務(wù)器是通過(guò)什么傳輸數(shù)據(jù)的?Socket沒(méi)錯(cuò),前面的文章不是通過(guò)Socket實(shí)現(xiàn)過(guò)一個(gè)簡(jiǎn)單的web服務(wù)器嗎 嘿嘿 ,然后Socket只是傳輸層的東東,那它
如果把數(shù)據(jù)發(fā)送到客戶端瀏覽器的呢,在者說(shuō)瀏覽器是通過(guò)什么把數(shù)據(jù)(請(qǐng)求)發(fā)送給服務(wù)器的呢? 是不是通過(guò)報(bào)文啊 客戶端通過(guò)請(qǐng)求報(bào)文想服務(wù)端發(fā)送請(qǐng)求,然
后呢服務(wù)器接受到客戶端的請(qǐng)求,又通過(guò)響應(yīng)報(bào)文將服務(wù)端的數(shù)據(jù)發(fā)送給服務(wù)器。那么今天的Cookice就是通過(guò)報(bào)文傳輸?shù)?下面通過(guò)圖繼續(xù)講解
Set-Cookie: userName=admin; expires=Thu, 26-Apr-2012 15:52:34 GMT; path=/
設(shè)置cookie 將服務(wù)端設(shè)置的cookice 傳給客戶端瀏覽器,其中還包括了失效時(shí)間
從圖中可以看出服務(wù)端設(shè)置cookice是通過(guò)響應(yīng)報(bào)文頭將cookice傳輸給瀏覽器滴,然后客戶端呢 客戶端是通過(guò)請(qǐng)求報(bào)文頭將cookice傳輸給服務(wù)端滴
注意:
1. 因?yàn)镃ookice是存儲(chǔ)在客戶端的數(shù)據(jù),如果有敏感的數(shù)據(jù)必須在服務(wù)端加密后然后在保存
2. Cookice在客戶端有兩種保存形式:(1)保存在硬盤(pán)上(設(shè)置了cookice的失效時(shí)間的情況下) (2)保存在內(nèi)存中(在沒(méi)有設(shè)置cookice的失效時(shí)間的情況下)
3. 如果服務(wù)端的cookice和客戶端已有的cookice重名則會(huì)覆蓋原有的cookice
4. 如果要想清除某個(gè)cookice的話可是設(shè)置它的失效時(shí)間小于當(dāng)前的日期即可cookie.Expires = DateTime.Now.AddDays(-1);