cookie
可以記錄用戶操作狀態,在服務器端也可以操作cookie
,這也是session
會話控制的依據點。
1.獲取cookie
通過req.headers.cookie
拿到cookie
字符串:
var http = require('http'); http.createServer(function (req, res) { // 獲得客戶端的Cookie var Cookies = {}; req.headers.cookie && req.headers.cookie.split(';').forEach(function( Cookie ) { var parts = Cookie.split('='); Cookies[ parts[ 0 ].trim() ] = ( parts[ 1 ] || '' ).trim(); }); console.log(Cookies) res.end('Hello World\n'); }).listen(8000);
2.設置cookie
基礎設置:
res.writeHead(200, {
'Set-Cookie': 'myCookie=test',
'Content-Type': 'text/plain'
});
多組設置:
res.writeHead(200, {
'Set-Cookie': ["aaa=bbb","ccc=ddd","eee=fff"],
'Content-Type': 'text/plain'
});
但真正使用時,我們的Cookie並非這樣簡單的的格式,需要設置過期時間等等:
res.writeHead(200, {
'Set-Cookie': 'myCookie=test; Expires=Wed, 13-Jan-2021 22:23:01 GMT;HttpOnly ',
'Content-Type': 'text/html'
});
HttpOnly
屬性: 這是微軟對Cookie
做的擴展。如果在Cookie中設置了"HttpOnly"
屬性,那么通過程序(JS腳本、Applet等)將無法讀取到Cookie
信息,這樣能有效的防止XSS攻擊。
Expires
屬性:指定過期時間,格式為"name=value;; expires=GMT_String";其中GMT_String
是以GMT
格式表示的時間字符串,超過這個時間,Cookie
將消失,不可訪問。Secure
屬性: 當設置為true
時,表示創建的Cookie
會被以安全的形式向服務器傳輸,也就是只能在 HTTPS 連接中被瀏覽器傳遞到服務器端進行會話驗證,如果是 HTTP 連接則不會傳遞該信息,所以不會被竊取到Cookie 的具體內容。同上,在客戶端我們也無法在document.Cookie
找到被設置了Secure=true
的Cookie
鍵值對。Secure
屬性是防止信息在傳遞的過程中被監聽捕獲后信息泄漏,HttpOnly
屬性的目的是防止程序獲取Cookie后進行攻擊。我們可以把Secure=true
看成比HttpOnly
更嚴格的訪問控制。path
屬性: 指定可訪問Cookie
的目錄。例如:"userId=320; path=/shop";就表示當前Cookie
僅能在shop
目錄下使用。