【狀態保持】Cookie解釋以及原理分析


我們知道web網站在客戶端存儲數據有三種形式:1. Cookie   2. hidden(隱藏域) 3.QueryString 其中viewstate什么的都是通過第二種方式隱藏域存儲滴。

      客戶端存儲數據有三種形式,那服務器端有幾種呢? 嘿嘿 服務器端有:1. Session 2. Application 3. database 4. caching(緩存) 其中session用的較多,當然數據庫是必須的。

      好了今天的主角是cookie(小甜餅)先看下cookie存在哪吧!首先,打開運行對話框輸入cookies會打開一個文件夾沒錯這就是存儲cookies的地方(聲明:這里只是存儲的IE瀏覽器的cookies,什么谷歌、火狐什么的存在他們所對應瀏覽器的安裝目錄中)。

先看一下怎么新建一個cookie吧!

HttpCookie cookie = new HttpCookie("userName");
cookie.Value = userName;
cookie.Expires = DateTime.Now.AddHours(2);
Response.Cookies.Add(cookie);

第一行:創建一個HttpCookie對象,然后構造函數 給個cookie名稱
第二行:給這個cookie賦值---->因為cookie是以鍵值對存儲的 ex:userName = “admin”
第三行:設置此cookie的失效時間,此值是一個具體的失效時間datetime類型   上面是設置兩個小時后失效
第四行:將cookie寫到cookie中,即寫在響應報文頭中一會分析原理的時候會講到。

行設置了cookice了那我怎么讀它呢?廢話少說上代碼

Request.Cookies["userName"].Value

      呵呵,是不是很簡單,就是在請求中有個Cookices集合然后通過索引的方式訪問他---->把它比較成Request.Form["....."]  這句是不是經常使。

好了會創建了也會獲得了 那咱下面就分析一下原理

     大家想下服務器是通過什么傳輸數據的?Socket沒錯,前面的文章不是通過Socket實現過一個簡單的web服務器嗎 嘿嘿 ,然后Socket只是傳輸層的東東,那它

如果把數據發送到客戶端瀏覽器的呢,在者說瀏覽器是通過什么把數據(請求)發送給服務器的呢?  是不是通過報文啊  客戶端通過請求報文想服務端發送請求,然

后呢服務器接受到客戶端的請求,又通過響應報文將服務端的數據發送給服務器。那么今天的Cookice就是通過報文傳輸的 下面通過圖繼續講解

Set-Cookie: userName=admin; expires=Thu, 26-Apr-2012 15:52:34 GMT; path=/

設置cookie  將服務端設置的cookice 傳給客戶端瀏覽器,其中還包括了失效時間

從圖中可以看出服務端設置cookice是通過響應報文頭將cookice傳輸給瀏覽器滴,然后客戶端呢 客戶端是通過請求報文頭將cookice傳輸給服務端滴

注意:

1. 因為Cookice是存儲在客戶端的數據,如果有敏感的數據必須在服務端加密后然后在保存

2. Cookice在客戶端有兩種保存形式:(1)保存在硬盤上(設置了cookice的失效時間的情況下) (2)保存在內存中(在沒有設置cookice的失效時間的情況下)

3. 如果服務端的cookice和客戶端已有的cookice重名則會覆蓋原有的cookice

4. 如果要想清除某個cookice的話可是設置它的失效時間小於當前的日期即可cookie.Expires = DateTime.Now.AddDays(-1);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM