cookie、session cookie:在瀏覽器保存一些數據,每次請求都會帶過來 *不安全、有限(4K) session:保存數據,保存在服務端 *安全、無限 session:基於cookie實現的 *cookie中會有一個session的ID,伺服器利用sessionid找到session文件 ...
cookie、session
cookie:在瀏覽器保存一些數據,每次請求都會帶過來
*不安全、有限(4K)
session:保存數據,保存在服務端
*安全、無限
--------------------------------------------------------------------------------------------------------------
session:基於cookie實現的
*cookie中會有一個session的ID,伺服器利用sessionid找到session文件、讀取、寫入
隱患:session劫持
cookie:
1.cookie空間非常小——省著用
2.安全性非常差——校驗cookie是否被篡改過
用法:
a.發送cookie
res.secret='字元串'; //秘鑰,對cookie加密 res.cookie(名字, 值, {path: '/', maxAge: 毫秒, signed: true});
// path:路徑,maxAge:過期時間,signed:是否加密
b.讀取cookie
cookie-parser中間件 server.use(cookieParser('秘鑰')); server.use(function (){ req.cookies 未簽名版 req.signedCookies 簽名版 });
c.刪除cookie
res.clearCookie(名字);
舉例:
const express=require('express'); const cookieParser=require('cookie-parser'); var server=express(); //cookie server.use(cookieParser('wesdfw4r34tf')); server.use('/', function (req, res){ req.secret='wesdfw4r34tf'; res.cookie('user', 'blue', {signed: true}); console.log('簽名cookie:', req.signedCookies) console.log('無簽名cookie:', req.cookies);
//res.clearCookie('user');
res.send('ok'); }); server.listen(8080);
session:
cookie-session中間件
cookieSession(options)
name
要設置的Cookie的名稱,預設為session
。
keys
用於簽署和驗證Cookie值的鍵列表。
secret
如果keys
沒有提供,將用該字元串做標記。
Cookie Options
其他選項傳遞給 cookies.get()
和 cookies.set()
,允許你控制secure、path、domain,並簽署其他設置。
這些選項還可以包含以下任何內容(有關完整列表,請參閱 cookies模塊文檔:
maxAge
:表示Date.now()
到期的毫秒數expires
:Date
指示Cookie過期日期的對象(預設情況下在會話結束時過期)。path
:指示cookie路徑的字元串(/
預設情況下)。domain
:表示cookie的域的字元串(無預設)。sameSite
:一個布爾值或字元串,指示cookie是否為“相同站點”cookie(false
預設情況下)。這可以設置為'strict'
,,'lax'
或true
(映射到'strict'
)。secure
:一個布爾值,指示cookie是否僅通過HTTPS發送(false
預設為HTTPtrue
預設情況下為HTTPS)。如果這樣設置,true
並且Node.js不是直接通過TLS連接,請務必閱讀如何在代理之後設置Express,否則Cookie可能無法正確設置。httpOnly
:一個布爾值,表示cookie是否僅通過HTTP(S)發送,並且不提供給客戶端JavaScript(true
預設情況下)。signed
:一個布爾值,表示cookie是否要被簽名(true
預設情況下)。如果是這樣的話,.sig
還會發送一個帶附加尾碼的同名的另一個cookie ,一個27位元組的url-safe base64 SHA1值代表第一個Keygrip鍵的cookie-name = cookie-value的哈希值。此簽名密鑰用於在下次接收到Cookie時檢測篡改。overwrite
:一個布爾值,表示是否覆蓋以前設置的相同名稱的cookie(true
預設情況下)。如果這是真的,在設置此Cookie時,將在同一請求中設置相同名稱的所有Cookie(不管路徑或域)是否從Set-Cookie頭部中過濾掉
1.寫入
server.use(cookieParser());
server.use(cookieSession({
keys: [.., .., .., ..]
}));
2.讀取
server.use('/', function (){ req.session });
2.刪除
delete req.session
req.session = null
舉例:
const express=require('express'); const cookieParser=require('cookie-parser'); const cookieSession=require('cookie-session'); var server=express(); //cookie server.use(cookieParser()); server.use(cookieSession({ name: 'sess', keys: ['aaa', 'bbb', 'ccc'], maxAge: 2*3600*1000 })); server.use('/', function (req, res){ if(req.session['count']==null){ req.session['count']=1; }else{ req.session['count']++; } console.log(req.session); res.send('ok'); }); server.listen(8080);
--------------------------------------------------------------------------------------------------------------