cookie和session起源,原理,實現

2021-09-03 02:23:35 字數 3100 閱讀 6696

一、引入

1.一種新的需求產生了

隨著web**的快速發展,**已經不再用於單純的資訊展示,而是乙個龐大的具有互動式的多網頁的應用。在web應用中,資訊的登入是一種很常見的功能,登入後頁面跳轉必須保持登入狀態,不能但是每一次頁面跳轉都需要重新登入。在這樣的需求下cookie應運而生。

二、cookie

1.什麼是cookie

cookie就是乙個資料

上文我們知道,cookie就是一種讓後台知道,之前請求情況的資料。那麼我們就要關心,資料的內容和儲存方式。我們知道一般都是前端傳送包含cookie請求到後台,後台通過cookie來了解之前訪問的情況,那麼cookie一定是儲存在前端的。(也就是說,前端每請求一次資料,更新並儲存cookie在瀏覽器,下一次請求將之前儲存的cookie,發給後台,讓後台了解以前請求的情況)。至於儲存的內容,由前後端協商設計。後台需要了解什麼資訊就儲存什麼資訊。

ps:同時cookie也可以儲存一些不太重要的資訊(如曾經瀏覽的商品,購物車內容)

2.cookie的特點

儲存在瀏覽器中

瀏覽器記錄上次請求的資料,下一次請求發給後台,並記錄這次返回的資訊。

也可以記錄一些不重要的資訊,為後台減輕儲存壓力

儲存容量較小(一般4kb)

cookie由於每次請求都要向後台傳送資料,所以容量要有限制,否則會大大降低網路傳輸效率。

不安全(可以修改或是偽造)

由於資料在瀏覽器中儲存,任何人都可以隨意進行更改,達到欺騙後台的目的。所以cookie儲存一些不太重要的資訊,對於一些重要資訊要進行防篡改和加密處理。

3.cookie使用流程

首次訪問後台分配cookie給瀏覽器,瀏覽器儲存cookie

瀏覽器第二次訪問,將儲存的cookie發給後台,後台識別並更新cookie,返回瀏覽器再次儲存

4.cookie的屬性

name:乙個唯一確定的cookie名稱。通常來講cookie的名稱是不區分大小寫的。

value:儲存在cookie中的字串值。最好為cookie的name和value進行url編碼

domain:cookie對於哪個域是有效的。所有向該域傳送的請求中都會包含這個cookie資訊。這個值可以包含子域(如:

yq.aliyun.com),也可以不包含它(如:.aliyun.com,則對於aliyun.com的所有子域都有效,這裡子域表示**的二級域).

path: 表示這個cookie影響到的路徑,瀏覽器跟會根據這項配置,像指定域中匹配的路徑傳送cookie。

expires:失效時間,表示cookie何時應該被刪除的時間戳(也就是,何時應該停止向伺服器傳送這個cookie)。如果不設定這個時間戳,瀏覽器會在頁面關閉時即將刪除所有cookie;不過也可以自己設定刪除時間。這個值是gmt時間格式,如果客戶端和伺服器端時間不一致,使用expires就會存在偏差。

max-age: 與expires作用相同,用來告訴瀏覽器此cookie多久過期(單位是秒),而不是乙個固定的時間點。正常情況下,max-age的優先順序高於expires。

httponly: 告知瀏覽器不允許通過指令碼document.cookie去更改這個值,同樣這個值在document.cookie中也不可見。但在http請求張仍然會攜帶這個cookie。注意這個值雖然在指令碼中不可獲取,但仍然在瀏覽器安裝目錄中以檔案形式存在。這項設定通常在伺服器端設定。

secure: 安全標誌,指定後,只有在使用ssl鏈結時候才能傳送到伺服器,如果是http鏈結則不會傳遞該資訊。就算設定了secure 屬性也並不代表他人不能看到你機器本地儲存的 cookie 資訊,所以不要把重要資訊放cookie就對了伺服器端設定

5.cookie的應用

cookie最大的乙個用途就是,瀏覽器跳轉保持登入和短時間免登陸。

cookie還有乙個用途就是,儲存一些不重要的資訊,如:曾經瀏覽的商品等。

cookie目的是為曾經使用過該**的人提供一些資料儲存。

ps:瀏覽器是否有(該**的)cookie不能作為是否曾經登入的依據。因為cookie儲存在瀏覽器,可能被篡改不安全。

三、session

為解決cookie不安全的問題,我們可以使用session,來提高**安全性。

1.什麼是session

session是儲存在伺服器上的資料

我們知道由於cookie是儲存在客戶端上的,所以有被篡改的風險,不安全。要儲存重要的資料一定要保證不會被篡改才是安全的,如果檔案儲存在伺服器端,使用者無法私自進行修改,那麼安全性就會大大提高。session就是一種服務端儲存資訊的方式。

2.session原理

session是一種基於cookie的儲存方式。說的通俗一點,session負責儲存資料,cookie負責告訴後台,是哪乙個資料。當建立乙個新session的時候,向客戶端下發乙個session-id,讓客戶端儲存session-id在cookie中,下一次發起請求的時候,將session-id發回後台,後台通過session-id,在很多session中查詢到相應session-id對應的session進行操作。

3.session與資料庫的對比

我們知道session和後台資料庫都是在服務端的資料儲存方式。那麼這兩者有什麼區別呢?

4.session的使用應注意

session-id為伺服器自動生成的,它的maxage屬性一般為-1,表示僅當前瀏覽器內有效,並且各瀏覽器視窗間不共享,關閉瀏覽器就會失效。因此同一機器的兩個瀏覽器視窗訪問伺服器時,會生成兩個不同的session。但是由瀏覽器視窗內的鏈結、指令碼等開啟的新視窗(也就是說不是雙擊桌面瀏覽器圖示等開啟的視窗)除外。這類子視窗會共享父視窗的cookie,因此會共享乙個session。

session的預設失效時間是20分鐘

session不能替代資料庫,不能將session時間設定為無限長,這樣會導致記憶體占用過大。當然session的資料也可以寫入資料庫中,長期儲存。

四、安全性

1、cookie防篡改

cookie作為登入狀態儲存在前端,有被篡改的可能。通過新增簽名的方式,提公升安全性。簽名的作用不是禁止惡意修改,而是可以看出是否有修改過。如果被修改過,那麼服務端判定cookie無效。

2、加密

cookie也可以加密儲存在前端,但是實際意義不大,重要的資訊一般儲存在session。cookie如果存有重要資訊,就算再嚴謹的加密方式,總會有破解的可能。安全性不如session。

cookie和session和token是什麼?

什麼是session?什麼是cookie?什麼是token?1 cookie?由於http是一種無狀態協議,伺服器沒有辦法單單從網路連線上面知道訪問者的身份,為了解決這個問題,就誕生了cookie cookie實際上是一小段的4k文字資訊。客戶端請求伺服器,如果伺服器需要記錄該使用者狀態,就使用re...

Session和Cookie的區別

session和cookie的區別 1 儲存的位置不同 session儲存在伺服器端的記憶體中,占用伺服器資源。cookie是儲存在客戶端。可以是瀏覽器中或者是檔案中 2 儲存的時間不同 session是關閉當前會話相關瀏覽器後自動清空。cookie是根據過期時間而會有不同。3 安全性不同 sess...

cookie和session的區別

一 cookie機制和session機制的區別 具體來說cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在伺服器端保持狀態的方案。同時我們也看到,由於在伺服器端保持狀態的方案在客戶端也需要儲存乙個標識,所以session機制可能需要借助於cookie機制來達到儲存標識的目...