cookie與session的區別

1、什麼是cookie和session 

        http協議是一種無狀態的協議,瀏覽器對服務器的每一次請求都是獨立的。爲了使得web能夠產生一些動態信息,就需要保存”狀態”,而cookie和session機制就是爲了解決http協議無狀態而產生。

  • cookie是一種在客戶端保存狀態的方案,用來記錄用戶的一些信息,也是實現session的一種方式。
  • session是一種在服務器端保存狀態的方案,這個數據可以保存在集羣、數據庫、文件中。

       我們瀏覽網站的時候,經常會自動保存賬號與密碼,這樣下次訪問的時候,就可以直接登錄了。這種技術的實現就是利用了cookie技術。

 

 2、cookie和session的區別 

        在學校旁邊的一家麪館,有消費三碗免費一碗的活動。然而一次性消費三碗的可能性很小,需要用某種方式來記錄顧客的消費狀態,這時就有兩種方案: 

  • cookie方案: 發給顧客一張卡,上面記錄着消費量,一般還有個時限。每次消費的時候顧客只要出示這張卡,則此次消費的狀態就被記錄下來了。這就是在客戶端保持狀態。
  • session方案: 同樣發給顧客一張卡,但是卡上只有一個卡號,用來標識用戶身份,其他什麼都沒有。每次顧客去消費時,只要出示這張卡,則店員就在店裏的記錄本上找到卡號所對應的記錄,並且添加一些消費信息。這就是在服務器端保存狀態的方法。

        由於session方案需要session id(卡號)將客戶端和服務器端連接起來,所以一般session機制需要藉助cookie來在客戶端保存session id。當然除了cookie還有一種url重寫的方法也能夠實現session機制。

        服務端通過cookie來識別特定的客戶:每次HTTP請求的時候,客戶端都會發送相應的cookie信息到服務端。實際上大多數的應用都是用 cookie 來實現session跟蹤的,第一次創建session的時候,服務端會在HTTP協議中告訴客戶端,需要在 cookie 裏面記錄一個session id,以後每次請求把這個會話ID發送到服務器,我就知道你是誰了。

 

 3、cookie 

        cookie是由服務端生成,併發送給瀏覽器,由瀏覽器將cookie保存到本地文件內。一般在瀏覽器的”Internet選項->瀏覽歷史記錄->設置->查看文件”路徑下保存。如圖:cookie文件的名字一般是user@domain。 

        cookie文件的內容都是經過加密的,需要經過CGI程序處理。cookie文件的內容有name、value、expire(過期時間)、path、domain(域)、以及secure(安全)。 

path: 指定與cookie關聯的頁面。 

domain:指定關聯的服務器或域。 

secure: 指定cookie的值如何通過網絡在用戶和web服務器之間傳遞。缺省情況下,這個屬性爲空,默認使用http傳遞數據。如果被標記爲”secure”,則使用HTTPS傳遞數據。 

expire:一般cookie生成時就會被指定一個expire的值,也就是生存時間。在這個週期內cookie是有效的,超過這個週期cookie就會被清除。 

        cookie可以讓瀏覽器記住訪問者的特定信息,如上次訪問的位置、花費的時間等。cookie最典型的應用就是自動登錄,即登錄某個站點之後,在有效時間內打開這個站點可以不再輸入賬號密碼而自動登錄。 

        cookie實際利用了網頁代碼中的http頭部信息進行傳遞。瀏覽器打開一個頁面時,服務器會將cookie伴隨着網頁數據傳回到瀏覽器,瀏覽器會根據相關設置考慮是否保存cookie。 

        由於cookie中包含了一些敏感信息,雖然信息經過加密,但是如果被別人截獲,那麼只要把cookie向服務器提交,那麼就可以冒充其他人訪問服務器。所以一般不要使用自動保存密碼等功能。

 

 4、session  

        當程序需要爲某個客戶端的請求創建一個session時,服務器首先檢查這個客戶端的請求裏是否已包含一個session id。如果有則表明已經爲此客戶端創建過session,服務器就按照這個session id查找出服務器端保存的session(查找失敗的話,會創建一個新的session)。如果請求中不包含session id,則就回創建一個新的session,並把session id返回到客戶端進行保存。

        客戶端瀏覽器可以通過cookie保存session id,但是cookie可以被瀏覽器禁止。

  • 客戶端的瀏覽器禁用Cookie會造成什麼問題:

        session 的運行依賴 session id,而 session id是存在 cookie 中的,也就是說,如果瀏覽器禁用了 Cookie ,同時 session 也會失效。

  • 如何解決?

        cookie可以被人爲的禁止,則必須有其他機制以便在Cookie被禁止時仍然能夠把Session id傳遞迴服務器。 經常被使用的一種技術叫做 “URL重寫”:即每次HTTP交互時,URL路徑後面都會被附加上一個諸如 sid=xxxxx 這樣的參數(也就是就是把session id直接附加在URL路徑的後面),服務端據此來識別用戶。

        還有一種表單隱藏字段技術,就是服務器會自動修改表單,添加一個隱藏字段,以便在表單提交時能夠把session id傳遞迴服務器。 

 

5、總結 

  • cookie數據存放在瀏覽器上,session數據存放在服務器上。一般把登陸信息用session保存。 
  • session會在一定時間內保存在服務器上,當訪問增多時,會佔用服務器的性能。 
  • 單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章