在咱們關閉一個登陸過的網址並從新打開它後,咱們的登陸信息依然沒有丟失;當咱們瀏覽了商品後歷史記錄裏出現了咱們點擊過的商品;當咱們推回到首頁後,推薦商品也爲咱們選出了類似物品;事實上當咱們有過此類操做後,瀏覽器會將咱們的操做信息保存到cookie上面。阿進而言之,cookie就是儲存在用戶本地終端上的數據。javascript
1.cookie保存在瀏覽器本地,只要不過時關閉瀏覽器也會存在。 2.正常狀況下cookie不加密,用戶可輕鬆看到 3.用戶能夠刪除或者禁用cookie 4.cookie能夠被篡改 5.cookie可用於攻擊 6.cookie存儲量很小,大小通常是4k 7.發送請求自動帶上登陸信息
1.安裝java
cnpm install cookie-parser --save
2.引入express
const cookieParser=require("cookie-parser");
3.設置中間件npm
app.use(cookieParser());
4.設置cookie瀏覽器
res.cookie("name",'zhangsan',{maxAge: 900000, httpOnly: true}); //res.cookie(名稱,值,{配置信息})
關於設置cookie的參數說明:服務器
domain: 域名 name=value:鍵值對,能夠設置要保存的 Key/Value,注意這裏的 name 不能和其餘屬性項的名字同樣 Expires: 過時時間(秒),在設置的某個時間點後該 Cookie 就會失效,如 expires=Wednesday, 09-Nov-99 23:12:40 GMT。 maxAge: 最大失效時間(毫秒),設置在多少後失效 。 secure: 當 secure 值爲 true 時,cookie 在 HTTP 中是無效,在 HTTPS 中才有效 。 Path: 表示 在那個路由下能夠訪問到cookie。 httpOnly:是微軟對 COOKIE 作的擴展。若是在 COOKIE 中設置了「httpOnly」屬性,則經過程序(JS 腳本、applet 等)將沒法讀取到COOKIE 信息,防止 XSS 攻擊的產生 。 singed:表示是否簽名cookie, 設爲true 會對這個 cookie 簽名,這樣就須要用 res.signedCookies 而不是 res.cookies 訪問它。被篡改的簽名 cookie 會被服務器拒絕,而且 cookie 值會重置爲它的原始值。
5.獲取cookiecookie
req.cookie.name;
下面是一個基礎實例:app
const express=require("express"); const cookieParser=require("cookie-parser"); var app=express(); //設置中間件 app.use(cookieParser()); app.get("/",function(req,res){ res.send("首頁"); }); //設置cookie app.get("/set",function(req,res){ res.cookie("userName",'張三',{maxAge: 20000, httpOnly: true}); res.send("設置cookie成功"); }); //獲取cookie app.get("/get",function(req,res){ console.log(req.cookies.userName); res.send("獲取cookie成功,cookie爲:"+ req.cookies.userName); }); app.listen(8080);
當訪問set路由後會設置cookie,當訪問get路由後會獲取到設置的cookie值。固然你也能夠在其餘頁面繼續獲取當前cookie,以實現cookie共享。dom
只須要增長res.cookie中option對象的值,便可實現對相應路由下多個二級路由的cookie進行共享,代碼以下:ui
const express=require("express"); const cookieParser=require("cookie-parser"); var app=express(); //設置中間件 app.use(cookieParser()); app.get("/",function(req,res){ res.send("首頁"); }); //設置cookie app.get("/set",function(req,res){ res.cookie("userName",'張三',{maxAge: 200000, httpOnly: true,domain: "ccc.com"}); res.send("設置cookie成功"); }); //獲取cookie app.get("/get",function(req,res){ console.log(req.cookies.userName); res.send("獲取cookie成功,cookie爲:"+ req.cookies.userName); }); app.listen(8080);
咱們能夠看到:
不一樣的二級域名也能訪問到相同的cookie,只要知足ccc.com這個頂級域名就行。關於下一章我會講解cookie加密(簽名),先寫到這裏吧!