1.安装
2.导入session中间件
const session=require("express-session")
3. 设置中间件
说明:
- 设置了session的名称为"sid",这是cookie的名称,默认值是connect.id。
- 设置了一个密钥"forever",用于对session数据进行加密和签名。
- 设置了两个选项:saveUninitialized和resave。saveUninitialized表示是否每次请求自动创建cookie用来存储session的id,默认值为false;resave表示是否在每次请求时重新保存session,默认值为true。这里设置为true,表示每次请求都会重新保存session。
- 使用了MongoStore作为session存储方式,将session数据存储到MongoDB数据库中。需要提供一个mongoUrl参数,指定数据库的连接配置。
- 设置了cookie的一些属性,如httpOnly表示开启后前端无法通过JS操作获取cookie,maxAge表示控制sessionID的过期时间,这里设置为5分钟。
app.use(session({
name:"sid", //设置cookie的name,默认值是connect.id
secret:"forever", //参与加密的字符串(又称签名)
saveUninitialized:false, //是否每次请求自动创建cookie用来存储session的id
resave:true, //是否在每次请求时重新保存session 20分钟,40分钟
store:MongoStore.create({
mongoUrl:'mongodb://127.0.0.1:27017/project' //数据库的连接配置
}),
cookie:{
httpOnly:true, //开启后前端无法通过JS操作获取cookie
maxAge:1000*60*5 //这一条是控制sessionID的过期时间
}
}))
4.session的读取
app.get("/cart",(req,res)=>{
//访问session对象,从而存储用户的关键信息
//检测session是否存在用户数据
if(req.session.username){
res.send("欢迎来到购物车页面")
}else{
res.send("你还没有登录")
}
})
5.session的销毁
app.get("/logout",(req,res)=>{
req.session.destroy(()=>{
res.send("退出成功")
})
})
6.源码展示
const express=require("express")
//导入session中间件
const session=require("express-session")
const MongoStore=require("connect-mongo")
const app=express()
//设置中间件
app.use(session({
name:"sid", //设置cookie的name,默认值是connect.id
secret:"forever", //参与加密的字符串(又称签名)
saveUninitialized:false, //是否每次请求自动创建cookie用来存储session的id
resave:true, //是否在每次请求时重新保存session 20分钟,40分钟
store:MongoStore.create({
mongoUrl:'mongodb://127.0.0.1:27017/project' //数据库的连接配置
}),
cookie:{
httpOnly:true, //开启后前端无法通过JS操作获取cookie
maxAge:1000*60*5 //这一条是控制sessionID的过期时间
}
}))
//首页路由
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'){
//设置session信息
req.session.username='admin'
req.session.sid='258aefccc'
// 成功响应
res.send("success")
}else{
res.send("fail")
}
})
//session的读取
app.get("/cart",(req,res)=>{
//访问session对象,从而存储用户的关键信息
//检测session是否存在用户数据
if(req.session.username){
res.send("欢迎来到购物车页面")
}else{
res.send("你还没有登录")
}
})
//session的销毁
app.get("/logout",(req,res)=>{
req.session.destroy(()=>{
res.send("退出成功")
})
})
app.listen(3000,()=>{
console.log("服务启动成功");
})