咱們知道http協議是無狀態的,服務器端沒法判斷用戶的狀態,那麼咱們須要有一種方式告訴服務端當前請求的用戶是誰,這種方式就是cookie;有了cookie以後服務端能夠知道當前請求用戶的狀態。本文主要介紹cookie的基礎,下一節將深刻介紹cookie的使用。javascript
HTTP Cookie(也叫 Web Cookie 或瀏覽器 Cookie)是服務器發送到用戶瀏覽器並保存在本地的一小塊數據,它會在瀏覽器下次向同一服務器再發起請求時被攜帶併發送到服務器上。固然,要不要發送cookie實際上是開發者能夠控制的。後面我會經過demo給你們展現cookie的使用方式。html
知道了cookie其實就是存在瀏覽器端的一小塊數據,那麼它有什麼做用呢?能夠想象一個場景:當你瀏覽購物網站的時候,看中了一件商品,而後加入了購物車,這時你忽然有事須要外出,而後你關閉了電腦;等你回來以後想起來你還有東西要買,而後你打開電腦,打開購物網站,打開購物車,發現商品還在。那服務端怎麼知道仍是你這我的瀏覽的網站呢?其實這就是cookie的一個做用,能夠記錄用戶的登陸狀態和用戶的一些信息。
固然,cookie還能夠用在其餘的方面:java
cookie的設置有兩種方式,一種是經過Document.cookie設置,另外一種是經過服務端設置;
(1)js操做
經過js設置cookie的方式很簡單:瀏覽器
document.cookie = 'my_token=abc';
複製代碼
這樣就在瀏覽器中設置了一個name爲my_token的cookie了; 也能夠經過這個方式獲取cookie:安全
let cookies = document.cookie;
console.log(cookies); // "my_token=abc"
複製代碼
(2)服務端設置
服務端在響應請求的時候,header中設置set-cookie就能夠設置cookie了:服務器
// 設置cookie,注意一點:set-cookie要在writeHead以前,不然會報錯,也就是須要在響應客戶端以前設置
response.setHeader('Set-Cookie', ['server_cookie=aaa']);
response.writeHead(200, {
'Content-Type': 'text/html'
});
複製代碼
瀏覽器在發出一個請求以後默認的會把cookie放在請求頭中發送到服務端:markdown
這就是爲何cookie中不要設置太多的數據的緣由。cookie
既然cookie能夠記錄用戶的登陸狀態,那麼它的安全是不容忽視的。
有兩種方法能夠確保 Cookie 被安全發送,而且不會被意外的參與者或腳本訪問:Secure 屬性和HttpOnly 屬性。
Secure併發
標記爲 Secure 的 Cookie 只應經過被 HTTPS 協議加密過的請求發送給服務端,所以能夠預防 man-in-the-middle 攻擊者的攻擊。但即使設置了 Secure 標記,敏感信息也不該該經過 Cookie 傳輸,由於 Cookie 有其固有的不安全性,Secure 標記也沒法提供確實的安全保障, 例如,能夠訪問客戶端硬盤的人能夠讀取它。網站
HttpOnly
JavaScript Document.cookie API 沒法訪問帶有 HttpOnly 屬性的cookie;此類 Cookie 僅做用於服務器。例如,持久化服務器端會話的 Cookie 不須要對 JavaScript 可用,而應具備 HttpOnly 屬性。此預防措施有助於緩解跨站點腳本(XSS)攻擊。
以上介紹了cookie的定義、cookie的基本設置,很是簡單,可是cookie在使用的時候並非那麼簡單的,下一篇文章會詳細介紹cookie的設置、cookie的安全、cookie的其餘屬性。