0. 引子,我們為什麼要cookie和session
因為http請求是無狀態的(不能記錄使用者的登入狀態等),所以需要某種機制來儲存使用者的登入狀態等資訊,在下次訪問web服務的時候,不用再次校驗是否登入等狀態,session機制和cookie機制分別是在服程式設計客棧務器端和瀏覽器端的解決方案。
1.關於cookie
1.1 什麼是cookie
cookie,原意餅乾。用來在瀏覽器端儲存使用者的狀態資訊,然後在訪問後端的時候將這部分資訊帶回到後端。
cookie的內容主要包括:名字,值,過期時間,路徑和域
1.2 cookie的分類
會話cookie 不設定過期時間的cookie 儲存在瀏覽器的記憶體中,關閉瀏覽器,cookie便被銷毀。(常常被用作session)
普通cookie 設定了過期時間 儲存在硬碟上
1.3怎麼應用
發起請求時:瀏覽器檢查所有儲存的cookie,如果某個cookie所宣告的作用範圍(由路徑和域決定)大於等於將要請求的資源所在的位置,則把該cookie附在請求資源的http請求頭上傳送給伺服器。
處理請求時:在伺服器端, 一般會對請求頭中帶的cookie資訊做檢查(比如說登入檢查),如果檢查通過,才能進行實際的業務處理。
如果校驗不通過,例如沒有找到cookie或者cookie資訊不正確(可能是偽造),跳轉讓其登入,然後登入完成之後,在響應中返回cookie資訊,瀏覽器會根據返回的cookie資訊,儲存在硬碟或者記憶體中供下次使用。、
2.關於session
2.1什麼是session
session 用來在伺服器端儲存使用者的狀態資訊。
2.2怎麼使用
瀏覽器發起請求時:伺服器首先會讀取請求頭中session資訊。如果沒有找到session資訊或者本地檢索不到此sessionid,如果沒有就新生成乙個sessionid,儲存到伺服器硬碟或者memcache中。
瀏覽器接收到響應:會將這個返回的sessionid在本地記憶體也儲存乙份,供下一次請求使用。session儲存在本地的其中一種實現方案是儲存資訊在cookie上,但是實際上cookie並不是session儲存唯一解決方案,使用url重寫的方式也可(把session id直接附加在url路徑的後面 )。
3.cookie和sessiond的主要區別
1、儲存位置稍有區別
cookie資料存放在客戶的瀏覽器上,伺服器端不用儲存。session資料放在伺服器上,本地記憶體也有乙份。
2、安全性不同
cookie安全性不如session。因為普通cookie儲存在本地硬碟上,黑客可以偽造url等方式發起xss攻擊,獲取本地硬碟儲存狀態的cookie,進而竊取使用者的敏感資訊。
session則不同,只有在使用者登入此**時發起xss攻擊才能獲取session資訊,關閉瀏覽器之後,session即被銷毀,安全性較cookie要好
3.跨域支援上的不同
cookie支援跨網域名稱訪問,例如將domain屬性設定為「.biaodianfu.com」,則以「.biaodianfu.com」為字尾的一切網域名稱均能夠訪問該c程式設計客棧ookie。跨網域名稱cookie如今被普遍用在網路中,例如google、baidu、sina等。而session則不會支援跨網域名稱訪問。session僅在他所在的網域名稱內有效。
4.伺服器壓力的不同
session是保管在伺服器端的,每個使用者都會產生乙個session。假如併發訪問的使用者十分多,會產生十分多的session,耗費大量的記憶體。因而像google、baidu、sina這樣併發訪問量極高的**,是不太可能運用session來追蹤客戶會話的。考慮到減輕伺服器效能方面,應當使用cookie。
5. 訪問方式的不同
cookie中只能保管ascii字串,假如需求訪問unicode字元或者二進位制資料,需求先進行編碼。cookie中也不能直接訪問j**a物件。若要儲存略微複雜的資訊,運用cookie是比擬艱難的。
而session中能夠訪問任何型別的資料,包括而不限於string、integer、list、map等。session中也能夠直接保gceiixnvdo管j**a bean乃至任何j**a類,物件等,運用起來十分便當。能夠把session看做是乙個j**a容器類。
6.cookie的儲存內容大小有限制
單個cookie儲存的資料不能超過4k,很多瀏覽器都限制乙個站點最多儲存20個cookie。
本文標題: 關於session和cookie的簡單理解
本文位址: /ruanjian/j**a/152868.html
Django中session和cookie的用法
session 存在伺服器端,用request物件進行設定 設定session 在後端寫入 request.session money 100 缺省會在cookie中產生乙個sessionid 獲取session值 只能在後端獲取 print request.session.get money co...
php個人總結 session和cookie
1.cookie與session的關係 cookie和session的方案雖然分別屬於客戶端和服務端,但是服務端的session的實現對客戶端的cookie有依賴關係的 步驟大概如下 1.服務端執行session機制 2.生成對應而唯一的session id 通過對這個session id的解析和處...
Cooki和session的區別和原理
1 cookie資料存放在客戶的瀏覽器上,session資料放在伺服器上。2 cookie不是很安全,別人可以分析存放在本地的cookie並進行cookie欺騙 考慮到安全應當使用session。3 session會在一定時間內儲存在伺服器上。當訪問增多,會比較占用你伺服器的效能 考慮到減輕伺服器效...