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