標籤:function 刪除cookie overwrite 代理 客戶 同名 密鑰 位元組 read
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();//cookieserver.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
預設為HTTP true
預設情況下為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();//cookieserver.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);
--------------------------------------------------------------------------------------------------------------
nodejs cookie與session