Session

Session中间件 think_session 支持存储 file、memcache、redis。

安装

  1. npm i think_session --save

引入中间件

1、项目中增加中间件 middleware/session.js

  1. module.exports = require('think_session');

2、项目中间件配置 config/middleware.js:

  1. list: [..., 'cache', 'session'], //加载的中间件列表
  2. config: { //中间件配置
  3. ...,
  4. cache: {
  5. ...
  6. },
  7. session: {
  8. session_type: 'file', //数据缓存类型 file,redis,memcache
  9. session_name: 'thinkkoa', //session对应的cookie名称
  10. session_key_prefix: 'ThinkKoa:', //session名称前缀
  11. session_options: {}, //session对应的cookie选项
  12. session_sign: '', //session对应的cookie使用签名
  13. session_timeout: 24 * 3600, //服务器上session失效时间,单位:秒
  14. // session对应的cookie配置
  15. cookie_option: {
  16. domain: '', // cookie所在的域名
  17. path: '/', // cookie所在的路径
  18. // maxAge: -1, // cookie有效时长
  19. httpOnly: true, // 是否只用于http请求中获取
  20. },
  21. //session_type=file
  22. file_suffix: '.json', //File缓存方式下文件后缀名
  23. file_path: process.env.ROOT_PATH + '/cache',
  24. //session_type=redis
  25. //redis_host: '127.0.0.1',
  26. //redis_port: 6379,
  27. //redis_password: '',
  28. //redis_db: '0',
  29. //redis_timeout: 10, //try connection timeout
  30. //session_type=memcache
  31. //memcache_host: '127.0.0.1',
  32. //memcache_port: 11211,
  33. //memcache_poolsize: 10, //memcache pool size
  34. //memcache_timeout: 10, //try connection timeout,
  35. }
  36. }

使用

引入 think_session中间件后,ctx 对象上会自动扩展一个session方法:

  1. ctx.session(key, value, timeout);

读取session:

  1. //控制器中
  2. this.session(key);
  3. //中间件中
  4. ctx.session(key);

写入session:

  1. //timeout单位秒,此处缓存超时时间为30s
  2. //控制器中
  3. this.session('name', 'test', 30);
  4. //中间件中
  5. ctx.session('name', 'test', 30);

删除session:

  1. //删除单条session记录
  2. this.session('name', null);
  3. //删除当前用户所有session记录
  4. this.session();