1. 程式人生 > >關於Cookie和Session的區別及使用

關於Cookie和Session的區別及使用

1、無狀態的HTTP協議:

        協議是指計算機通訊網路中兩臺計算機之間進行通訊所必須共同遵守的規定或規則,超文字傳輸協議(HTTP)是一種通訊協議,它允許將超文字標記語言(HTML)文件從Web伺服器

傳送到客戶端的瀏覽器。

        HTTP協議是無狀態的協議。一旦資料交換完畢,客戶端與伺服器端的連線就會關閉,再次交換資料需要建立新的連線。這就意味著伺服器無法從連線上跟蹤會話

2、會話(Session)跟蹤:

  會話,指使用者登入網站後的一系列動作,比如瀏覽商品新增到購物車併購買。會話(Session)跟蹤是Web程式中常用的技術,用來跟蹤使用者的整個會話

。常用的會話跟蹤技術是Cookie與Session。Cookie通過在客戶端記錄資訊確定使用者身份Session通過在伺服器端記錄資訊確定使用者身份。換句話說就是cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在伺服器端保持狀態的方案。

3、Cookie:

        Cookie實際上是一小段的文字資訊。客戶端請求伺服器,如果伺服器需要記錄該使用者狀態,就使用response向客戶端瀏覽器頒發一個Cookie。客戶端會把Cookie儲存起來。

  當瀏覽器再請求該網站時,瀏覽器把請求的網址連同該Cookie一同提交給伺服器。伺服器檢查該Cookie,以此來辨認使用者狀態。伺服器還可以根據需要修改Cookie的內容。

       Cookie的內容主要包括:名字,值,過期時間,路徑和域。路徑與域一起構成cookie的作用範圍。

1)Name 和 Value 屬性由程式設定,預設值都是空引用。

2)Domain屬性的預設值為當前URL的域名部分,不管發出這個cookie的頁面在哪個目錄下的。

3)Path屬性的預設值是根目錄,即 ”/” ,不管發出這個cookie的頁面在哪個目錄下的。可以由程式設定為一定的路徑來進一步限制此cookie的作用範圍。

4)Expires 屬性,這個屬性設定此Cookie 的過期日期和時間。

4、Session:

1)存在伺服器的一種用來存放使用者資料的類HashTable結構。

2)瀏覽器第一次傳送請求時,伺服器自動生成了一HashTable和一Session ID來唯一標識這個HashTable,並將其通過響應傳送到瀏覽器。瀏覽器第二次傳送請求會將前一次伺服器響應中的Session ID放在請求中一併傳送到伺服器上,伺服器從請求中提取出Session ID,並和儲存的所有Session ID進行對比,找到這個使用者對應的HashTable。 

3)一般這個值會有個時間限制,超時後毀掉這個值,預設30分鐘。

4)當用戶在應用程式的 Web頁間跳轉時,儲存在 Session 物件中的變數不會丟失而是在整個使用者會話中一直存在下去。

5)Session的實現方式和Cookie有一定關係。建立一個連線就生成一個session id,開啟幾個頁面就好幾個了,這裡就用到了Cookie,把session id存在Cookie中,每次訪問的時候將Session id帶過去就可以識別了.

5、區別:

1)儲存資料量方面:session 能夠儲存任意的 java 物件,cookie 只能儲存 String 型別的物件

2)一個在客戶端一個在服務端。因Cookie在客戶端所以可以編輯偽造,不是十分安全。

3)Session過多時會消耗伺服器資源,大型網站會有專門Session伺服器,Cookie存在客戶端沒問題。

4)域的支援範圍不一樣,比方說a.com的Cookie在a.com下都能用,而www.a.com的Session在api.a.com下都不能用,解決這個問題的辦法是JSONP或者跨域資源共享。