使用 session

  1. egg 在内部使用 egg-session 插件完成 session 功能,egg-session 插件在内部使用 koa-session 完成 session 功能

  2. 注意点:

    • 设置的属性不能以 _ 开头
    • 属性名不能为 isNew
    • 具体原因见 koa-session 源码
ctx.session.prop = value;

原理

  1. koa-session 和普通 session 不同,它在默认情况下,是将 session 中保存的数据序列化后加密保存到客户端的 cookie

  2. 传统的 session 处理模式

  3. egg-session 的处理模式

配置

  1. koa-session 的配置:

    exports.session = {
      // cookie 的键
      key: 'EGG_SESS', 
    
      // cookie 的过期时间
      maxAge: 24 * 3600 * 1000, 
    
      // 该 cookie 是否仅允许 http 传输,不允许 js 获取
      httpOnly: true, 
    
      // 该 cookie 的内容是否要加密
      encrypt: true, 
    
      // 是否每次请求后进一步延长 cookie 的过期时间
      renew: false, 
    };
    
  2. 传统模式

    • 虽然不推荐,不过可以将这种 session 模式转换为传统模式,只需要设置 session 的存储模式即可
    • 也可以直接使用插件 egg-session-redis (传统模式),安装后,启用它即可;
    // app.js
    module.exports = app => {
      // 自定义 session 存储模式
      app.sessionStore = {
        // 根据指定的键得到对应的 session 值
        async get (key) {
          // return value;
        },
        // 根据指定的键、值、过期时间(毫秒),设置 session
        async set (key, value, maxAge) {
          
        },
        // 摧毁 session 调用的方法
        async destroy (key) {
          // destroy key
        },
      };
    };
    
  3. 注意:

    • 一旦选择了将 Session 存入到外部存储中,就意味着系统将强依赖于这个外部存储,当它挂了的时候,就完全无法使用 Session 相关的功能了;
    • 因此更推荐只将必要的信息存储在 Session 中,保持 Session 的精简并使用默认的 Cookie 存储,用户级别的缓存不要存储在 Session 中;
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 使用 session
  2. 2. 原理
  3. 3. 配置