使用 session
egg 在内部使用 egg-session 插件完成 session 功能,egg-session 插件在内部使用 koa-session 完成 session 功能
注意点:
- 设置的属性不能以 _ 开头
- 属性名不能为 isNew
- 具体原因见 koa-session 源码
ctx.session.prop = value;
原理
-
koa-session 和普通 session 不同,它在默认情况下,是将 session 中保存的数据序列化后加密保存到客户端的 cookie 中
-
传统的 session 处理模式
-
egg-session 的处理模式
配置
-
koa-session 的配置:
exports.session = { // cookie 的键 key: 'EGG_SESS', // cookie 的过期时间 maxAge: 24 * 3600 * 1000, // 该 cookie 是否仅允许 http 传输,不允许 js 获取 httpOnly: true, // 该 cookie 的内容是否要加密 encrypt: true, // 是否每次请求后进一步延长 cookie 的过期时间 renew: false, };
-
传统模式
- 虽然不推荐,不过可以将这种 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 }, }; };
-
注意:
- 一旦选择了将 Session 存入到外部存储中,就意味着系统将强依赖于这个外部存储,当它挂了的时候,就完全无法使用 Session 相关的功能了;
- 因此更推荐只将必要的信息存储在 Session 中,保持 Session 的精简并使用默认的 Cookie 存储,用户级别的缓存不要存储在 Session 中;
Egg👉 日志记录
上一篇