session 是另一种记录客户状态的机制,与 cookie 保存在浏览器端不同,session 保存在服务器当中。
当客户端访问服务器时服务器会生成一个 session 对象,对象中保存的是 key:value 值,同时服务器会将 key 传回给客户端的 cookie 当中;当用户第二次访问服务器时,就会把 cookie 当中的 key 传回到服务器当中,最后服务器会把 value 值返回给客户端。
所以 key 是全局唯一的标识,客户端和服务端依靠这个全局唯一的标识来访问会话信息数据。
session 的本质和原理就是加密的 cookie。
安装 express-session
npm install express-session --save
引入 express-session 模块
var session = require('express-session')
使用 express-session 中间件
使用默认的:
app.use(session())
也可以自己配置:
app.use(session({
secret:"abcd", //随便写,用于加密混淆
resave:true, //保存到磁盘上
cookie:{
maxAge:7*24*60*60*1000 //有效期 7 天
}, //使用默认的 cookie{},有效期为一个会话
saveUninitialized:true //保存初始化
}))
定义一个路由测试:
var sessionRouter = require("./routers/sessionModules.js")
app.use('/sessioni',sessionRouter);
sessionModules.js 文件
var express = require('express');
var router = express.Router();
/* GET users listing. */
router.get('/', function(req, res, next) {
res.send('respond with a resource');
});
//设置 session
router('/setSession',(req,res)=>{
//登录之后,要能够快速获取 user 的姓名,vip 等级,是否登录
req.session.isLogin = 'true';
req.session.username = '小明';
req.session.vipLevel = 5;
req.session.maxAge = 10000; //重置 session 有效期 10 秒,10秒之后 session 过期
res.send('登录状态已经设置到 session 中')
})
// 获取 session
router.get('/getSession',(req,res)=>{
if(req.session.isLogin == 'true'){
res.send('欢迎等级为' + req.session.vipLevel + '的' +req.session.username )
}else{
res.send("尚未登录")
}
})
// 销毁 session
router.get('exitSession',(req,res)=>{
req.session.destroy(()=>{
console.log("销毁 session 完毕");
})
res.send('退出成功');
})
module.exports = router;
参考
https://www.expressjs.com.cn/resources/middleware/session.html
网友评论