cookie(需要cookie-parser): 在瀏覽器保存一些數據,每次請求都會帶過來
特點:1、空間小
2、安全性差
3、cookie可以在垂直讀取,上級目錄讀取下級目錄。
使用:1、使用時精打細算
2、對cookie進行安全保護,至少能校驗cookie是否被篡改過
讀取與解簽名: 簽名和沒有簽名過的cookie需要通過不同的方法讀取。
//導入讀取模塊
const cookieParser=require('cookie-parser');
//執行中間件,在cookieParser中輸入簽名密鑰進行解簽名 server.use(cookieParser('sadsadwdewef'));
//使用req.cookies獲取cookie信息 server.use('/aaa/a.html',function(req,res){
res.send('這里面只有簽名過的cookie: ',req.signedCookies) res.send('這里面只有沒有簽名過的coolie:',req.cookies); })
發送cookie:使用res.cookie直接設置cookie。
server.use('/',function(req,res){ //對cookie的設置必須放在send()之前,否則會報錯! res.cookie('user1','xiao1',{path:'/aaa',maxAge:7*24*3600*1000}); res.send('ok!'); res.end(); });
刪除cookie:
res.clearCookie(名字);
加密:使用簽名來防止cookie被修改
缺點:1、cookie值依然能被看到。
2、讀取簽名過的cookie必須進行解簽。
3、增加cookie大小,浪費空間。
//自定義字符串來創建密鑰。
req.secret='xuaiooasu65hg66';
//使用signed來確認對信息進行簽名。 res.cookie('user1','xiao1',{signed:true});
session(需要cookie-session):保存數據,保存在服務端---------------------------*安全、無限(服務器空間)
session是基於cookie實現的,當用戶訪問時服務器會給予用戶一個默認名為session的cookie,在后續的訪問中服務器會利用這個cookie找到session文件,進行讀取、寫入操作。
隱患:session劫持
在cookie中,除了session外,還有一個名為session.sig的cookie存在,它是session的簽名,用來保護session不被篡改。
屬性:session中可以自主設置的session屬性
server.use(cookieSession({ //手動設置session名 name:'sess', //手動設置session密鑰 keys:['aaa','bbb','ccc'], //手動設置session過期時間,單位為毫秒 maxAge:30*60*1000 }));
讀取:
//導入需要模塊 const cookieSession=require('cookie-session'); //使用中間件在req中添加session屬性 server.use(cookieSession()); server.use('/',function(req,res){ //輸出session數據 console.log(req.session); })
加密:使用keys數組來加密session,數組中密鑰循環使用,加大破解難度
server.use(cookieSession({ keys:['aaa','bbb','ccc'] }));
刪除:delete req.session