我知乎上看到一個很簡介的總結,覺得寫得非常好专肪,小結一下:
關于cookie 來自其他網頁的一些整理
自己抓包看了一下
當我們第一次登錄一個網站的時候刹勃,服務器會通過http協議里面setcookie的方式,給瀏覽器發(fā)放一個cookie(其實就是一個文件)
這就是瀏覽器保存的cookie
![Uploading image_435150.png . . .]
瀏覽器拿到cookie之后嚎尤,之后的http請求就會帶上cookie荔仁。給瀏覽器標識出自己的身份。
2. 關于session
cookie機制采用的是在客戶端保持狀態(tài)的方案芽死,而session機制采用的是在服務器端保持狀態(tài)的方案乏梁。
當程序需要為某個客戶端的請求創(chuàng)建一個session時,服務器首先檢查這個客戶端的請求里是否已包含了一個session標識(稱為session id)关贵,如果已包含則說明以前已經為此客戶端創(chuàng)建過session遇骑,服務器就按照session id把這個session檢索出來使用(檢索不到,會新建一個)坪哄,如果客戶端請求不包含session id质蕉,則為此客戶端創(chuàng)建一個session并且生成一個與此session相關聯的session id,session id的值應該是一個既不會重復翩肌,又不容易被找到規(guī)律以仿造的字符串模暗,這個session id將被在本次響應中返回給客戶端保存。
保存這個session id的方式可以采用cookie念祭,這樣在交互過程中瀏覽器可以自動的按照規(guī)則把這個標識發(fā)送給服務器兑宇。一般這個cookie的名字都是類似于SEEESIONID。但cookie可以被人為的禁止粱坤,則必須有其他機制以便在cookie被禁止時仍然能夠把session id傳遞回服務器隶糕。
cookie 被禁止時的解決方案:
經常被使用的一種技術叫做URL重寫,就是把session id直接附加在URL路徑的后面站玄。還有一種技術叫做表單隱藏字段枚驻。就是服務器會自動修改表單,添加一個隱藏字段株旷,以便在表單提交時能夠把session id傳遞回服務器再登。比如:
<form name="testform" action="/xxx">
<input type="hidden" name="jsessionid" value="ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764">
<input type="text">
</form>
實際上這種技術可以簡單的用對action應用URL重寫來代替。
cookie 和session 的區(qū)別:
1晾剖、cookie數據存放在客戶的瀏覽器上锉矢,session數據放在服務器上。
2齿尽、cookie不是很安全沽损,別人可以分析存放在本地的COOKIE并進行COOKIE欺騙
考慮到安全應當使用session。
3循头、session會在一定時間內保存在服務器上绵估。當訪問增多炎疆,會比較占用你服務器的性能
考慮到減輕服務器性能方面,應當使用COOKIE壹士。
4磷雇、單個cookie保存的數據不能超過4K,很多瀏覽器都限制一個站點最多保存20個cookie躏救。