一、爲何會有COOKIE這種機制算法
首先一種場景, 在一個網站上面, 我發起一次請求,那服務器怎麼知道我是誰?是誰發起的此次請求呢, HTTP協議是無狀態的協議, 瀏覽器的每一次請求,服務器都當作一次新請求, 可是在實際應用中咱們須要知道這個請求來自於誰,須要查找哪些信息返回給訪問者,瀏覽器
這個時候就引入了COOKIE機制, COOKIE機制是什麼呢? 其實就是服務器給客戶端返回數據的時候,中間加了一個標識, 而後客戶端再次請求數據的時候,數據中帶上這個標識, 那麼服務器接收到請求消息時就知道這個請求來自於誰了(至關於服務器接收到請求時,若是沒有帶識別碼,生成一個識別碼給客戶端, 若是有識別碼,就把這個識別碼須要的對應內容返回給客戶端)
安全
cookie保存在客戶端,比較不安全;session保存在服務器端,比較安全。服務器
cookie目的能夠跟蹤會話,也能夠保存用戶喜愛或者保存用戶名密碼,session用來跟蹤會話。cookie
建議用戶名,密碼保存在session,其它信息可保存在cookie。session
先來了解一下各自的工做機制網站
1. cookie的工做機制
一、服務器向客戶端響應請求的時候,會在響應頭中設置set-cookie的值,其值的格式一般是name = value的格式spa
二、瀏覽器將 cookie 保存下來對象
三、每次請求瀏覽器都會自動將 cookie 發向服務器內存
四、cookie最初是在客戶端用於存儲會話信息的。
![](http://static.javashuo.com/static/loading.gif)
2. session的工做機制?
一、當客戶端第一次請求session對象時,服務器會建立一個session,並經過特殊算法算出一個session的ID,用來標識該session對象,而後將這個session序列放置到set-cookie中發送給瀏覽器
二、瀏覽器下次發請求的時候,這個sessionID會被放置在請求頭中,和cookie一塊兒發送回來
三、服務器再經過內存中保存的sessionID跟cookie中保存的sessionID進行比較,並根據ID在內存中找到以前建立的session對象,提供給請求使用,也就是服務器會經過session保存一個狀態記錄,瀏覽器會經過cookie保存狀態記錄,服務器經過二者的對比實現跟蹤狀態,這樣的作,也極大的避免了cookie被篡改而帶來的安全性問題
四、因爲cookie能夠被人爲的禁止,必須有其餘機制以便在cookie被禁止時仍然可以把session id傳遞迴服務器。常常被使用的一種技術叫作URL重寫,就是把session id直接附加在URL路徑的後面,附加方式也有兩種,一種是做爲URL路徑的附加信息,另外一種是做爲查詢字符串附加在URL後面
![](http://static.javashuo.com/static/loading.gif)
總之,cookie、session都會保存在瀏覽器,都會向服務器請求,只是實現的工做機制不一樣,使用的場景不一樣。