Cookie 在 Web 应用中经常承担标识请求方身份的功能,所以 Web 应用在 Cookie 的基础上封装了 Session 的概念,专门用做用户身份识别。

Session 和 Cookies 的区别

image.png
Session 是可以直接支持中文的

操作Session

login中保存Session

  1. // 保存 session
  2. ctx.session.user = body;

index中获取

  1. // 获取session
  2. const userSession = ctx.session.user;
  3. console.log(userSession);

image.png
logout 中清除

  1. ctx.session.user = null;

配置

默认给了一个 key 值:EGG_SESS

  1. config.session = {
  2. key: 'ZHOU_SESS',
  3. };

另外像之前 cookies 提到的 httpOnly 、maxAge 都是类似的
还有一个 renew :当发现用户访问时:session 剩余时间小于最大缓存时间的一半时,会自动刷新 session

Session 扩展

Session 也是储存在 cookies 中的,随着Session增多,cookies也会变大,直到不能再大了。
可以对其进行简单的扩展 使其一部分保存在内存当中
在最外层新建一个 app.js

  1. 'use strict';
  2. module.exports = app => {
  3. const store = {};
  4. app.sessionStore = {
  5. async get(key) {
  6. console.log('---store---', store);
  7. return store[key];
  8. },
  9. async set(key, value, maxAge) {
  10. store[key] = value;
  11. },
  12. async destroy(key) {
  13. store[key] = null;
  14. },
  15. };
  16. };

这样 cookies 中的Session 大小就固定了