簡單總結下 cookie、session

 

Cookies:web

    定義cookie 中文意思是「小甜餅」,可是,在互聯網中它跟食品沒有半毛錢關係,它主要是由web服務器應用程序建立,在客戶端計算機中保存,問題來了,爲何它web服務器要將建立好的文件保存在客戶端?由於客戶端發送一個請求到服務端,而後服務器端都是把他當作第一次訪問來對待,web 服務器要作的只是簡單將對應的響應發送到客戶端(瀏覽器),而後關閉客戶端(瀏覽器)與服務端的鏈接。這樣的缺點就很明顯,因爲HTTP 協議是無狀態的,服務器端不知道同時請求的客戶端是那個,也不知道該站點以前已經訪問過了該服務器,如今能夠根據客戶自定義查看。自從網景公司開發了Cookies,能夠利用Cookie來保存用戶的識別信息。Cookies的做用能夠記錄了您在該站點上曾經訪問過的頁面,由此幫助您下次訪問該站點時自定義查看。Cookies 也能夠存儲我的可識別信息。我的可識別信息是能夠用來識別或聯繫您的信息,例如姓名、電子郵件地址、家庭或工做地址,或者電話號碼。然而,網站只能訪問您提供的我的可識別信息。面試

    優勢:一、實現和使用都是很簡單的瀏覽器

              二、對於多個站點的Cookies都是由瀏覽器進行管理緩存

              三、由瀏覽器來負責維護Cookies的數據安全

   缺點:  一、有大小的限制(通常都是4KB)服務器

            二、不安全,都是以簡單文本的形式保存cookie

            三、Cookies最大數目也有限制。主流瀏覽器提供將cookies的個數限制在20條。若是新cookies到來,那麼老的將被刪除。有些瀏覽器能支持到300條的cookies數。session

 

建立cookies:asp.net

      當一個客戶端向服務器發出請求,服務器發送cookies給客戶端。而相同的cookies能夠被後續的請求使用。例如,若是codeproject.com將Session ID做爲cookies存儲。當一個客戶端首次向web服務器請求頁面,服務器生成Session ID,並將其做爲cookies發送往客戶端。網站

 如今,全部來自相同客戶端的後續請求,它將使用來自cookies的Session ID,就像下面這幅圖片展現的那樣。

瀏覽器和web服務器以交換cookies信息來做爲響應。對不一樣的站點,瀏覽器會維護不一樣的cookies。若是一個頁面須要cookies中的信息,當某個URL被「點擊」,首先瀏覽器將搜索本地系統的cookies的信息,而後才轉向服務器來得到信息。

建立cookies 代碼

HttpCookie setCookie = new HttpCookie("code");
setCookie.Name = "code";
setCookie.Value = code;
Response.Cookies.Add(setCookie);

setCookie.Name = "code";

setCookie.Value = code;
Response.Cookies.Add(setCookie);

如何獲取cookies 裏面的信息:

在讀取cookies以前,首先咱們須要檢查是否能找到該cookie。在讀取cookies以前,先檢查它老是一個很好的習慣,由於瀏覽器可能禁用cookies。

HttpCookie getCookie = Request.Cookies["code"];
string cookiesName=string.Empty;
if (getCookie != null)//防止瀏覽器禁用掉了cookies
{
   cookiesName = setCookie["code"];
}

持久化的cookies:這能夠被稱爲永久性的cookies,它被存儲在客戶端的硬盤內,直到它們失效。持久化的cookies應該被設置一個失效時間。有時,它們會一直存在直到用戶刪除它們。持久化的cookies一般被用來爲某個系統收集一個用戶的標識信息。

非持久化cookies:也能夠被稱之爲臨時性的cookies。若是沒有定義失效時間,那麼cookie將會被存儲在瀏覽器的內存中。我上面展現的例子就是一個非持久的cookies。

修改一個持久化的cookies與一個非持久化的cookies並無什麼不一樣。它們惟一的區別是——持久化的cookies有一個失效時間的設置。

 

Seesion:

  定義:是保存在服務器iis 上面的一個會話狀態,做爲一個全局變量,能夠做爲頁面傳值,數據類型都是「key-value」 字典類型存儲。

  與cookies 聯繫:當客戶端(瀏覽器)發送請求到服務器端時,服務器端都會判斷cookies 裏面有沒有seesionid ,若是沒有,就會建立一個sissionid 與cookies 一塊兒發送到客戶端,在cookies 保存在一塊兒,若是有seesionid,則將這個seesionid 與服務端session 池中的sessionid 判斷,檢查有沒有匹配的seesionid ,若是有,直接將對應的cookies 發送到客戶端。

session 特性:

1.Session是一種Web會話中的經常使用狀態之一。

2.Session提供了一種把信息保存在服務器內存中的方式。他能儲存任何數據類型,包含自定義對象。

3.每一個客戶端的Seesion是獨立存儲的。

4.在整個會話過程當中,只要SessionID的cookie不丟失,都會保存Session信息的。

5.Session不能跨進程訪問,只能由該會話的用戶訪問。應爲提取Session數據的id標識是以Cookie的方式保存到訪問者瀏覽器的緩存裏的。

6.當會話終止,或過時時,服務器就清除Session對象。

7.Session經常使用於保存登陸用戶的ID.

8.Session保存的數據是跨頁面全局型的。

Session原理

session是怎麼存儲,提取的?

1.在服務器端有一個session池,用來存儲每一個用戶提交session中的數據,Session對於每個客戶端(或者說瀏覽器實例)是「人手一份」,用戶首次與Web服務器創建鏈接的時候,服務器會給用戶分發一個SessionID做爲標識。SessionID是一個由24個字符組成的隨機字符串。用戶每次提交頁面,瀏覽器都會把這個SessionID包含在HTTP頭中提交給Web服務器,這樣Web服務器就能區分當前請求頁面的是哪個客戶端,而這個SessionID是一cookie的方式保存的在客戶端的內存中的,若是想要獲得Session池中的數據,服務器就會根據客戶端提交的惟一SessionID標識給出相應的數據返回。

PS:面試常問:若是客戶端禁用了cookie,session 還能用嗎?

 回答:能夠,雖然session 與cookies 是經過seesionid 保存到cookies 裏面去的,cookies消失,sessionid 也沒有了,seesion 就不能檢查到客戶端用戶的訪問記錄,可是能夠經過url 重寫的方式進行seesionid  客戶端與服務器端進行交互,或者用Cookies Munging (當用戶向服務器請求一個頁面,服務器編碼「session id」而後將它們加入到頁面的每個HREF 的連接中。當用戶點擊一個連接,asp.net解碼session id並傳遞它給用戶請求的頁面。如今,正在被請求的頁面就能夠檢索到任何的session變量。這一切都將平滑地發生——當asp.net檢測到用戶瀏覽器不支持cookies時)

 

 

因爲本人經驗不足,若是說錯的地方,但願大大的指出,不勝感激!!

相關文章
相關標籤/搜索