1. 程式人生 > >nodejs cookie與session

nodejs cookie與session

ole org con only 中間件 通過 rip 存在 null

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()到期的毫秒數
  • expiresDate指示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值代表第一個Keygripcookie-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);

--------------------------------------------------------------------------------------------------------------

nodejs cookie與session