node.js session

2021-07-21  本文已影响0人  Vergil_wj

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

上一篇 下一篇

猜你喜欢

热点阅读