說到cookie與session我們首先要說一下為什么要引入這兩個東西,這兩個多西到底是干什么的
起源
由於HTTP協議使無狀態的:
- 每一次請求都是新的請求,不會記得之前通信的狀態
- 客戶端與服務端的一次通訊,就是一次會話
由於HTTP協議無狀態的特性,我們在某些存在狀態的網站中(如登陸),如果只是用HTTP協議而不加入狀態保持,那當用戶每次訪問一個新的網頁都需要用戶進行登陸,降低用戶的體驗度,因此引入cookie和session對會話的狀態進行存儲,以達到狀態保持的效果。
區別
Cookie
保存在瀏覽器中,以鍵值對的形式存在,可以用來做用戶認證,存儲上限一般為4K; 由於數據存儲在瀏覽器中,容易被其他惡意程序利用,數據的安全性不高。
Session
將用戶的會話信息保存在服務器端,key值是隨機產生的字符串,value值時session的內容,依賴於cookie將每個用戶對應的key值保存到瀏覽器中; session沒有具體的大小限制,可以存儲的數據量比cookie大; 由於信息保存在服務器端,不會輕易的被惡意程序利用,數據的安全性相對較高
安全性
上面也提到了,cookie是存在用戶的瀏覽器中的,是可以被惡意程序獲取並加以利用的;那么問題來了,既然cookie內的內容會被獲取到,那存在cookie中的sessionid(也就是key值),豈不是也會被獲取到並加以利用?
沒錯,其實HTTP本身就不安全,只要是存在cookie中的數據都可以獲取到並加以利用,但是session的安全性也是相對的,由於數據存儲在數據庫中,就算sessionid被獲取利用,但是session中的數據並不會被惡意程序獲取,這一點相對cookie來說就安全了一些;
所以使用HTTP協議的網頁本身就不會帶有較為敏感的信息(如支付),如果涉及到一些敏感的信息,並不希望被輕易獲取到,還是建議使用HTTPS協議。
以上純屬個人理解,如有錯誤,歡迎指正
轉載於:https://juejin.im/post/5c07c7026fb9a049fd0fa262