express學習(三)—— cookie和session cookie存在瀏覽器中,最大隻能保存4K數據,不安全 session存在伺服器中,不能獨立(先讀取cookie再讀取session),較安全 cookie 工具 發送cookie: 基本的東西先寫好: 讀取cookie 接著,用cooki ...
express學習(三)—— cookie和session
cookie存在瀏覽器中,最大隻能保存4K數據,不安全
session存在伺服器中,不能獨立(先讀取cookie再讀取session),較安全
cookie
工具
發送cookie:
基本的東西先寫好:
const express = require('express');
var server=express();
// cookie
server.use('/',function(req,res){
res.cookie('名字', '值', {path: '/aaa/a.html', maxAge: 30*24*3600*1000}); //path指明誰可以訪問,‘/aaa/a.html'表示根目錄下aaa文件夾中的a.html文件;maxAge表示最長保留時間(以毫秒計)
})
server.listen(8080)
讀取cookie
接著,用cookie-parser工具
const express=require('express');
const cookieParser=require('cookie-parser');
var server=express();
//cookie
server.use(cookieParser());
server.use('/', function (req, res){
console.log(req.cookies);
res.send('ok');
});
server.listen(8080);
執行結果:
但是cookie分為兩種,加密的(有簽名的)、不加密的(沒有簽名的)。
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'; //有了上面的’server.use(cookieParser('wesdfw4r34tf'));‘,這裡的req.secret可以不寫。因為cookie會自動傳值給secret
res.cookie('user', 'blue', {signed: true});
console.log('簽名cookie:', req.signedCookies,'\n')
console.log('無簽名cookie:', req.cookies);
res.send('ok');
});
server.listen(8080);
執行結果:
一定要把簽名的內容告訴cookieParser,如server.use(cookieParser('wesdfw4r34tf'));
,否則它不知道解讀誰,就會返回很長一串,如圖所示的結果:
刪除cookie
一條語句就足夠
res.clearCookie('名字');
session
用到一個中間件:cookie-session:
npm install cookie-session --save
const express=require('express');
const cookieParser=require('cookie-parser');
const cookieSession=require('cookie-session');
var server = express();
server.use(cookieParser());
server.use(cookieSession({
name:'my_session',
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']+=1;
}
console.log(req.session['count'])
res.send('ok');
})
server.listen(8080);
把密鑰數組增大:
var arr=[];
for(var i=0;i<100000;i++){
arr.push('sig_'+Math.random());
}
server.use(cookieParser());
server.use(cookieSession({
name:'my_session',
keys:arr, //用到上面的數組
maxAge:2*3600*1000 // 保存兩小時
}));
總結
server.use(cookieParser('簽名字元串'));
server.use(cookieSession({
}));
server.use(function (req, res){
//發送cookie
res.cookie(名字, 值, {signed: true});
//讀取cookie
res.cookies['user']
//刪除cookie
res.clearCookie('名字');
//獲取session
res.session['xxx']
//刪除session
delete res.session['xxx'];
});
為什麼delete不可以刪除cookie?
因為cookie存在瀏覽器端,而session是存在伺服器端,所以只有session才可以使用delete方法刪除。