微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Node.js:使用session存储用户信息

概念

Session用于记录客户状态的一种机制,不同于Cookie的是,Cookie存储在客户端,而Session则将数据存储在服务器上

Session 的用途

session 运行在服务器端,当客户端第一次访问服务器时,可以将客户的登录信息保存
当客户访问其他页面时,可以判断客户的登录状态,做出提示,相当于登录拦截
session 可以和 Redis 或者数据库等结合做持久化操作,当服务器挂掉时也不会导致某些客户信息(购物车)丢失

工作原理

  1. 当浏览器访问服务器并发送第一次请求时,服务器端会创建一个 session 对象,生成一个类似于key,value 的键值对
  2. 将 key(cookie)返回到浏览器(客户)端,浏览器下次再访问时,携带 key(cookie),找到对应的 session(value)
  3. 最后将存在session中的信息返回到页面

使用

  1. 项目中安装express-session和connect-mongo
    npm install express-session --save session插件
    npm install connect-mongo --save session数据存储到数据库

    在这里插入图片描述

  2. 代码中使用
    ① 引入express-session

    let session = require('express-session');
    

    在这里插入图片描述

    ② 引入connect-mongo用于express连接数据库存储session:结束数据库实现session持久化

    let mongoStore  = require('connect-mongo')(session);
    

    ③ 中间件使用session

    app.use(session({
        secret:'itlike',//加密字符串
        name:'likeid',//返回客户端key的名称认为connect_sid
        resave:false,//强制保存session,即使它没有变化
        saveUninitialized:true,//强制将未初始化的session存储。当新建一个session且未设定属性或值时,它就处于未初始化状态。在设定cookie前,这对于登录验证,减轻服务器存储压力,权限控制是有帮助的,认为true
        cookie: {maxAge: 24 * 3600},//一天
        rolling: false, //在每次请求时进行设置cookie,将重置cookie过期时间
        store:new mongoStore({//将session数据存储到mongo数据库中
            url:'mongodb://localhost:27017/college', //数据库地址
            touchAfter:24*3600  //多长时间往数据库中更新存储一次,除了在会话数据上更改了某些数据除外
        })
    }));
    

    ④ 配置好后,在用户登录的时候,进行存储session;在一些需要登录才能访问的界面,需要取session,如果没有,则跳转登录界面;用户退出,需要销毁session

    1. 获取session

      req.session
      

      配置好中间件后,就可以在服务器端,使用req.session获取session了

      在这里插入图片描述

    2. 设置session

      req.session.token = 'itlike'
      ```![在这里插入图片描述](https://www.jb51.cc/res/2022/10-08/07/d070da4e97073740c271ecc34d510bfb.jpg)
      
    3. 销毁session
      方法一:将cookie的时间设置为0,只有cookie中携带的信息通过客户端请求传到服务器,有对应的session接收session才起作用。
      cookie没了session自然也就将不起作用。
      方法req.session.destory()

      req.session.destory((err)=>{
      	console.log(err);
      })
      

      在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐