session

作者: 这是这时 | 来源:发表于2019-01-07 20:58 被阅读7次

    Session

    会话保持的机制,session 是记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 session 保存在服务器上。

    session 的使用

    • 第三方模块 express-session

    • 配置

      // app.js
      const session = require('express-session');
      
      app.use(session({ 
        secret: 'keyboard cat', 
        cookie: { maxAge: 60*60*24*1000 },
        resave: false,
        saveUninitialized: true,
      }));
      
      • name: 设置 cookie 中,保存 session 的字段名称,默认为 connect.sid 。
      • secret: 这个 string 对 sessionID 对应的cookie进行签名,并放在 cookie 中。
      • cookie: 设置存放 session id 的 cookie 的相关选项,默认为 (default: { path: '/’, httpOnly: true, maxAge: null })
      • resave: 强制session保存到session store中。即使在请求中这个session没有被修改。
      • saveUninitialized: 强制没有“初始化”的session保存到storage中,没有初始化的session指的是:刚被创建没有被修改(第一次请求是否生成 sessionid)
    • 使用

      // req.session 是一个对象
      // 当配置好 session 之后,可以使用 session 保持登录的状态
      req.session.user = user;
      
      // 在其他路由,可以判断登录的状态
      if (!req.session.user) {
        // 如果状态不存在则没有登录
      }
      
      // 退出的时候要,销毁session
      req.session.destroy()
      

    session的原理

    1. 浏览器向服务器发送登录请求(post),携带账号和密码
    2. 登录成功,服务器记录登录的状态,req.session.user = user; 服务器记录这些信息
    3. 服务器返回的响应头中携带 服务器生成的 sessionid(cookie中),身份标示
    4. 浏览器再次访问服务器的时候会通过cookie携带sessionid
    5. 服务器获取浏览器发送的sessionid后,在服务器查找sessionid,如果找不到,未登录
    6. 如果找到 sessionid,根据 sessionid 查找对应的对象,登录成功

    Cookie 和 Session 的区别

    • cookie 数据存放在客户端,session 数据放在服务器端。
    • cookie 不是很安全,别人可以分析存放在本地的cookie 并进行 cookie 欺骗 考虑到安全应当使用session。
    • session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能 考虑到减轻服务器性能方面,应当使用 cookie 。
    • 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
    • 将登陆信息等重要信息存放为 session、其他信息如果需要保留,可以放在cookie中

    参考资料

    相关文章

      网友评论

          本文标题:session

          本文链接:https://www.haomeiwen.com/subject/usbprqtx.html