Cookie與Session

Cookie

HTTP是一種不保存狀態的協議,也就是無狀態協議。Http自身不對請求和響應之間的通訊狀態作出保存,也就是說在在HTTP這個級別,協議對於發送過的請求和響應都不作出保存。瀏覽器

事實上:因爲一般一臺服務器會服務於幾萬個甚至更多的客戶(客戶端),若是把全部的客戶端信息都記錄下來,那麼會大大增長服務器的壓力,HTTP協議是無狀態的,也就意味着服務器無法記住某個客戶發出的請求和作出的響應,這樣的話客戶下一次再次請求時,服務器也沒法識別這個客戶,所以又會作出新的響應。好比登陸時,客戶明明已經登陸過了,可是跳轉到網站的其餘頁面,因爲是服務器是無狀態的服務器還得請求一次。爲了實現指望的保持狀態功能,因而引入了cookie技術。安全

Cookie是保存在客戶端的小段文本,隨着客戶端每個請求發送該url下的全部cookies到服務器端。服務器

cookies_1.png

Cookie的詳細工做流程以下:cookie_0.pngcookie

一、第一次請求時,瀏覽器中是沒有cookie信息的。session

cookies_2.png

二、服務器接收到請求後,會首先檢查是否存在Cookie,若是沒有Cookie,會生成一個Cookie。在響應頭中Set-Cookie中生成Cookie信息。生成的Cookie文本中,存在一個sessionId,服務器會記錄下來這個sessionId。網站

cookies_3png.png

三、客戶端再次請求時,瀏覽器會自動將Cookie信息添加到請求頭上,服務器接到請求會根據sessionId來判斷身份。url

cookies_4png.png

Session

Session保存在服務器端(在服務器端生成),經過惟一的sessionId來區別每個用戶。sessionId隨每一個請求發送到服務器(sessionId其實是Cookie中的一個字段),Session其實是一個保存在服務器的數據表,每個sessionId對應一個用戶。經過Cookie獲取到SessionId,而後再經過session的key獲取session值。spa

session_id.png

思考:若是不使用Cookie能不能實現維持會話?3d

仔細分析Cookie的功能,咱們使用Cookie最重要的就是保存了一個sessionId而後每次請求時,在請求頭中攜帶過去。若是沒有了Cookie,那麼咱們能夠不能夠經過其餘的手段把這個sessionId發送到服務端,並經過其餘手段再吉首這個sessionId。好比咱們能夠經過在Url後面添加上sessionId,這樣的話服務器端也能獲取到sessionId,而後 服務端再將sessionId返回回來,客戶端再進行保存。這樣的話也可以實現相似於Cookie的功能,可是這樣不太安全,由於sessionId直接在Url後面是可見的,很容易就被模仿了。也存在一個方法提升安全性,那就是服務器產生一個tooken,每請求一次tooken發生變化,tooken只能使用一次,這樣也能提升安全性。blog

相關文章
相關標籤/搜索