1.安装
npm i express-session
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.idsecret:"forever", //参与加密的字符串(又称签名)saveUninitialized:false, //是否每次请求自动创建cookie用来存储session的idresave:true, //是否在每次请求时重新保存session 20分钟,40分钟store:MongoStore.create({mongoUrl:'mongodb://127.0.0.1:27017/project' //数据库的连接配置}),cookie:{httpOnly:true, //开启后前端无法通过JS操作获取cookiemaxAge: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.idsecret:"forever", //参与加密的字符串(又称签名)saveUninitialized:false, //是否每次请求自动创建cookie用来存储session的idresave:true, //是否在每次请求时重新保存session 20分钟,40分钟store:MongoStore.create({mongoUrl:'mongodb://127.0.0.1:27017/project' //数据库的连接配置}),cookie:{httpOnly:true, //开启后前端无法通过JS操作获取cookiemaxAge:1000*60*5 //这一条是控制sessionID的过期时间}
}))
//首页路由
app.get("/",(req,res)=>{res.send("home")
})
//登录
app.get("/login",(req,res)=>{// 传入username=admin&password=adminif(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("服务启动成功");
})