cookie與session的機制與原理

cookie機制。正統的cookie分發是通過擴展HTTP協議來實現的,服務器通過在HTTP的響應頭中加上一行特殊的指示以提示瀏覽器按照指示生成相應的cookie。然而純粹的客戶端腳本如JavaScript或者VBScript也可以生成cookie。而cookie的使用是由瀏覽器按照一定的原則在後臺自動發送給服務器的。瀏覽器檢查所有存儲的cookie,如果某個cookie所聲明的作用範圍大於等於將要請求的資源所在的位置,則把該cookie附在請求資源的HTTP請求頭上發送給服務器。


     cookie的內容主要包括:名字,值,過期時間,路徑和域。路徑與域一起構成cookie的作用範圍。若不設置過期時間,則表示這個cookie的生命期爲瀏覽器會話期間,關閉瀏覽器窗口,cookie就消失。這種生命期爲瀏覽器會話期的cookie被稱爲會話cookie。會話cookie一般不存儲在硬盤上而是保存在內存裏,當然這種行爲並不是規範規定的。若設置了過期時間,瀏覽器就會把cookie保存到硬盤上,關閉後再次打開瀏覽器,這些cookie仍然有效直到超過設定的過期時間。存儲在硬盤上的cookie可以在不同的瀏覽器進程間共享,比如兩個IE窗口。而對於保存在內存裏的cookie,不同的瀏覽器有不同的處理方式。 

  session機制。session機制是一種服務器端的機制,服務器使用一種類似於散列表的結構(也可能就是使用散列表)來保存信息。 

  當程序需要爲某個客戶端的請求創建一個session時,服務器首先檢查這個客戶端的請求裏是否已包含了一個session標識------------稱爲session id,如果已包含則說明以前已經爲此客戶端創建過session,服務器就按照session id把這個session檢索出來使用(檢索不到,會新建一個),如果客戶端請求不包含session id,則爲此客戶端創建一個session並且生成一個與此session相關聯的session id,session id的值應該是一個既不會重複,又不容易被找到規律以仿造的字符串,這個session id將被在本次響應中返回給客戶端保存。


        保存這個session id的方式可以採用cookie,這樣在交互過程中瀏覽器可以自動的按照規則把這個標識發揮給服務器。一般這個cookie的名字都是類似於SEEESIONID。但cookie可以被人爲的禁止,則必須有其他機制以便在cookie被禁止時仍然能夠把session id傳遞迴服務器。
       經常被使用的一種技術叫做URL重寫,就是把session id直接附加在URL路徑的後面。還有一種技術叫做表單隱藏字段。就是服務器會自動修改表單,添加一個隱藏字段,以便在表單提交時能夠把session id傳遞迴服務器。

 

Jsessionid?

  Jsessionid只是tomcat的對sessionid的叫法,其實就是sessionid;在其它的容器也許就不叫jsessionid了。

 

 

cookie 和session的區別

  • 1. cookie放在客戶端的瀏覽器上,session放服務器上。

  • 2. Session生成的Session id是在cookie裏保存的,cookie被禁止後可以通過URL重寫來繼續使用session

  • 3. cookie不是安全,存放在本地的COOKIE可能被獲取並進行COOKIE欺騙。

  • 4. session會給服務器帶來壓力,考慮到服務器性能,應當使用COOKIE。

  • 5. cookie只能保存字符串類型,以文本的方式。session通過類似與Hashtable的數據結構來保存,能支持任何類型的對象(session中可含有多個對象)

  • 6.  單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie, Session大小沒限制。

 

Token 和Session區別

  • 1. Token放客戶端, Session在服務端。

  • 2. Session是空間換時間, Token是時間換空間。

  • 3. Token解決了集羣時候跨節點訪問問題。

 

Cookie有限制,每次請求服務端必須帶上,還有大小不能超過4kb,如果想突破這個限制怎麼辦?

WebStorage

爲克服由cookie所帶來的一些限制,當數據無需發回服務器時使用。

WebStorage兩個主要目標:

  • 1. 提供一種在cookie之外存儲會話數據的路徑。

  • 2. 提供一種存儲大量可以跨會話存在的數據的機制。

 

HTML5的WebStorage提供了兩種API:

  • localStorage(本地存儲)

  • sessionStorage(會話存儲)

點擊下方圖片,進入iTesting技術討論圈

 

這兩種區別在哪裏?

  • 1、生命週期:

localStorage的生命週期是永久的,關閉頁面或瀏覽器之後localStorage中的數據也不會消失。localStorage除非主動刪除數據,否則數據永遠不會消失。

sessionStorage的生命週期是在僅在當前會話下有效。sessionStorage引入了一個“瀏覽器窗口”的概念,sessionStorage是在同源的窗口中始終存在的數據。只要這個瀏覽器窗口沒有關閉,即使刷新頁面或者進入同源另一個頁面,數據依然存在。但是sessionStorage在關閉了瀏覽器窗口後就會被銷燬。同時獨立的打開同一個窗口同一個頁面,sessionStorage也是不一樣的。

  • 2、存儲大小:

localStorage和sessionStorage的存儲數據大小一般都是:5MB

  • 3、存儲位置:

localStorage和sessionStorage都保存在客戶端,不與服務器進行交互通信。

  • 4、存儲內容類型:

localStorage和sessionStorage只能存儲字符串類型,對於複雜的對象可以使用ECMAScript提供的JSON對象的stringify和parse來處理。

  • 5、應用場景:

localStoragese:常用於長期登錄(+判斷用戶是否已登錄),適合長期保存在本地的數據。sessionStorage:敏感賬號一次性登錄;

 

Web Storage帶來的好處: 

  • 1、減少網絡流量:

一旦數據保存在本地之後,就可以避免再向服務器請求數據,因此減少不必要的數據請求,減少數據在瀏覽器和服務器間不必要的來回傳遞 。

  • 2、快速顯示數據:

性能好,從本地讀數據比通過網絡從服務器上獲得數據快得多,本地數據可以及時獲得,再加上網頁本身也可以有緩存,因此整個頁面和數據都在本地的話,可以立即顯示 。

  • 3、臨時存儲:

很多時候數據只需要在用戶瀏覽一組頁面期間使用,關閉窗口後數據就可以丟棄了,這種情況使用sessionStorage非常方便。

注意:WebStorage這部分內容copy自網絡,原創不可考。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章