1.安裝
npm i express-session文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-559061.html
2.導(dǎo)入session中間件
const session=require("express-session")
3.?設(shè)置中間件
說(shuō)明:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-559061.html
- 設(shè)置了session的名稱(chēng)為"sid",這是cookie的名稱(chēng),默認(rèn)值是connect.id。
- 設(shè)置了一個(gè)密鑰"forever",用于對(duì)session數(shù)據(jù)進(jìn)行加密和簽名。
- 設(shè)置了兩個(gè)選項(xiàng):saveUninitialized和resave。saveUninitialized表示是否每次請(qǐng)求自動(dòng)創(chuàng)建cookie用來(lái)存儲(chǔ)session的id,默認(rèn)值為false;resave表示是否在每次請(qǐng)求時(shí)重新保存session,默認(rèn)值為true。這里設(shè)置為true,表示每次請(qǐng)求都會(huì)重新保存session。
- 使用了MongoStore作為session存儲(chǔ)方式,將session數(shù)據(jù)存儲(chǔ)到MongoDB數(shù)據(jù)庫(kù)中。需要提供一個(gè)mongoUrl參數(shù),指定數(shù)據(jù)庫(kù)的連接配置。
- 設(shè)置了cookie的一些屬性,如httpOnly表示開(kāi)啟后前端無(wú)法通過(guò)JS操作獲取cookie,maxAge表示控制sessionID的過(guò)期時(shí)間,這里設(shè)置為5分鐘。
app.use(session({
name:"sid", //設(shè)置cookie的name,默認(rèn)值是connect.id
secret:"forever", //參與加密的字符串(又稱(chēng)簽名)
saveUninitialized:false, //是否每次請(qǐng)求自動(dòng)創(chuàng)建cookie用來(lái)存儲(chǔ)session的id
resave:true, //是否在每次請(qǐng)求時(shí)重新保存session 20分鐘,40分鐘
store:MongoStore.create({
mongoUrl:'mongodb://127.0.0.1:27017/project' //數(shù)據(jù)庫(kù)的連接配置
}),
cookie:{
httpOnly:true, //開(kāi)啟后前端無(wú)法通過(guò)JS操作獲取cookie
maxAge:1000*60*5 //這一條是控制sessionID的過(guò)期時(shí)間
}
}))
?4.session的讀取
app.get("/cart",(req,res)=>{
//訪(fǎng)問(wèn)session對(duì)象,從而存儲(chǔ)用戶(hù)的關(guān)鍵信息
//檢測(cè)session是否存在用戶(hù)數(shù)據(jù)
if(req.session.username){
res.send("歡迎來(lái)到購(gòu)物車(chē)頁(yè)面")
}else{
res.send("你還沒(méi)有登錄")
}
})
5.session的銷(xiāo)毀
app.get("/logout",(req,res)=>{
req.session.destroy(()=>{
res.send("退出成功")
})
})
6.源碼展示
const express=require("express")
//導(dǎo)入session中間件
const session=require("express-session")
const MongoStore=require("connect-mongo")
const app=express()
//設(shè)置中間件
app.use(session({
name:"sid", //設(shè)置cookie的name,默認(rèn)值是connect.id
secret:"forever", //參與加密的字符串(又稱(chēng)簽名)
saveUninitialized:false, //是否每次請(qǐng)求自動(dòng)創(chuàng)建cookie用來(lái)存儲(chǔ)session的id
resave:true, //是否在每次請(qǐng)求時(shí)重新保存session 20分鐘,40分鐘
store:MongoStore.create({
mongoUrl:'mongodb://127.0.0.1:27017/project' //數(shù)據(jù)庫(kù)的連接配置
}),
cookie:{
httpOnly:true, //開(kāi)啟后前端無(wú)法通過(guò)JS操作獲取cookie
maxAge:1000*60*5 //這一條是控制sessionID的過(guò)期時(shí)間
}
}))
//首頁(yè)路由
app.get("/",(req,res)=>{
res.send("home")
})
//登錄
app.get("/login",(req,res)=>{
// 傳入username=admin&password=admin
if(req.query.username==='admin' && req.query.password==='admin'){
//設(shè)置session信息
req.session.username='admin'
req.session.sid='258aefccc'
// 成功響應(yīng)
res.send("success")
}else{
res.send("fail")
}
})
//session的讀取
app.get("/cart",(req,res)=>{
//訪(fǎng)問(wèn)session對(duì)象,從而存儲(chǔ)用戶(hù)的關(guān)鍵信息
//檢測(cè)session是否存在用戶(hù)數(shù)據(jù)
if(req.session.username){
res.send("歡迎來(lái)到購(gòu)物車(chē)頁(yè)面")
}else{
res.send("你還沒(méi)有登錄")
}
})
//session的銷(xiāo)毀
app.get("/logout",(req,res)=>{
req.session.destroy(()=>{
res.send("退出成功")
})
})
app.listen(3000,()=>{
console.log("服務(wù)啟動(dòng)成功");
})
到了這里,關(guān)于session中間件的使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!