session
一李根、什么是session几睛?
session是另一種記錄客戶狀態(tài)的機制房轿,與cookie保存在客戶端瀏覽器不同,session保存在服務器當中所森;當客戶端訪問服務器時囱持,服務器會生成一個session對象焕济,對象中保存的是key:value值,同時服務器會將key傳回給客戶端的cookie當中晴弃;當用戶第二次訪問服務器時掩幢,就會把cookie當中的key傳回到服務器中,最后服務器會吧value值返回給客戶端上鞠。因此上面的key則是全局唯一的標識粒蜈,客戶端和服務端依靠這個全局唯一的標識來訪問會話信息數(shù)據(jù)。
二、設置session
安裝:
npm install express-session --save
引入:
const session=require("express-session");
設置
session(options);
demo:
const express=require("express");
const session=require("express-session");
var app=express();
//配置中間件
app.use(session({
secret: "keyboard cat",
resave: false,
saveUninitialized: true,
cookie: ('name', 'value',{maxAge: 90000,secure: false})
}));
app.use('/login',function(req,res){
//設置session
req.session.userinfo='tom';
res.send("登陸成功能曾!");
});
app.use('/',function(req,res){
//獲取session
if(req.session.userinfo){
res.send("hello "+req.session.userinfo+"肿轨,welcome");
}else{
res.send("未登陸");
}
});
app.listen(3000);
session(option)中對session進行設置,它的主要參數(shù)是:
1. name - cookie的名字(原屬性名為 key)椒袍。(默認:’connect.sid’)
2. store - session存儲實例
3. secret - 用它來對session cookie簽名,防止篡改
4. cookie - session cookie設置 (默認:{ path: ‘/‘, httpOnly: true,secure: false, maxAge: null })
5. genid - 生成新session ID的函數(shù) (默認使用uid2庫)
6. rolling - 在每次請求時強行設置cookie驹暑,這將重置cookie過期時間(默認:false)
7. resave - 強制保存session即使它并沒有變化 (默認: true, 建議設為:false)
8. proxy - 當設置了secure cookies(通過”x-forwarded-proto” header )時信任反向代理。當設定為true時京办,
”x-forwarded-proto” header 將被使用。當設定為false時惭婿,所有headers將被忽略。當該屬性沒有被設定時财饥,將使用Express的trust proxy。
9. saveUninitialized - 強制將未初始化的session存儲沾瓦。當新建了一個session且未設定屬性或值時,它就處于未初始化狀態(tài)暴拄。在設定一個cookie前编饺,這對于登陸驗證,減輕服務端存儲壓力透且,權限控制是有幫助的。(默認:true)
10. unset - 控制req.session是否取消(例如通過 delete秽誊,或者將它的值設置為null)。這可以使session保持存儲狀態(tài)但忽略修改或刪除的請求(默認:keep)
三讼溺、session的常用方法
req.session.username="tom"
//獲取session
req.session.username
//重新設置cookie的過期時間
req.session.cookie.maxAge=9000000;
//銷毀session
req.session.destroy(function(err){
})
demo:退出登陸
const express=require("express");
const session=require("express-session");
var app=express();
//配置中間件
app.use(session({
secret: "keyboard cat",
resave: false,
saveUninitialized: true,
cookie: ('name', 'value',{ maxAge: 900000,
secure: false,
name: "seName",
resave: false})
}));
app.use('/login',function(req,res){
//設置session
req.session.userinfo='tom';
res.send("登陸成功最易!");
});
app.use('/loginOut',function(req,res){
//注銷session
req.session.destroy(function(err){
res.send("退出登錄!"+err);
});
});
app.use('/',function(req,res){
//獲取session
if(req.session.userinfo){
res.send("hello "+req.session.userinfo+"剔猿,welcome to index");
}else{
res.send("未登陸");
}
});
app.listen(3000);
如果感覺有幫助留下一個寶貴的贊或者給小編一個贊賞f揖!9榫础鄙早!