Express全系列教程之(六):cookie的使用


一、關於Cookie

在我們關閉一個登錄過的網址並重新打開它后,我們的登錄信息依然沒有丟失;當我們瀏覽了商品后歷史記錄里出現了我們點擊過的商品;當我們推回到首頁后,推薦商品也為我們選出了相似物品;事實上當我們有過此類操作后,瀏覽器會將我們的操作信息保存到cookie上面。阿進而言之,cookie就是儲存在用戶本地終端上的數據。

Cookie的特點

1.cookie保存在瀏覽器本地,只要不過期關閉瀏覽器也會存在。
2.正常情況下cookie不加密,用戶可輕松看到
3.用戶可以刪除或者禁用cookie
4.cookie可以被篡改
5.cookie可用於攻擊
6.cookie存儲量很小,大小一般是4k
7.發送請求自動帶上登錄信息

  

二、Cookie的安裝及使用

  1.安裝

cnpm install cookie-parser --save

  2.引入

const cookieParser=require("cookie-parser");

  3.設置中間件

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.獲取cookie

req.cookie.name;

  下面是一個基礎實例:

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共享。

 

三、多個二級域名共享cookie

只需要增加res.cookie中option對象的值,即可實現對相應路由下多個二級路由的cookie進行共享,代碼如下:

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加密(簽名),先寫到這里吧!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM