Session

需要用户登录的网站基本上都离不开 Session,ThinkJS 里默认支持多种类型的 Session,如:filedbredis 等。

支持的 Session 类型

  • memory 内存方式
  • file 文件类型
  • db 数据库类型
  • redis Redis 类型
    db Session

使用 db 类型的 Session 需要创建对应的数据表(如果是 MongoDB 则无需创建),可以用下面的 SQL 语句创建:

  1. DROP TABLE IF EXISTS `think_session`;
  2. CREATE TABLE `think_session` (
  3. `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  4. `cookie` varchar(255) NOT NULL DEFAULT '',
  5. `data` text,
  6. `expire` bigint(11) NOT NULL,
  7. PRIMARY KEY (`id`),
  8. UNIQUE KEY `cookie` (`cookie`),
  9. KEY `expire` (`expire`)
  10. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

需要将 think_ 改为 db 配置中的数据表前缀。

redis Session

使用 redis 类型的 Session 需要配置 Redis,具体见 配置

Session 配置

Session 默认配置如下,可以在 src/common/config/session.js 中进行修改:

  1. export default {
  2. type: 'file',
  3. name: 'thinkjs', //对应 cookie 的名称
  4. secret: '', //Session 对应的 cookie 是否需要加密
  5. timeout: 24 * 3600, //过期时间,默认为一天
  6. cookie: { // cookie options
  7. length: 32
  8. },
  9. adapter: {
  10. file: {
  11. path: think.RUNTIME_PATH + '/session'
  12. }
  13. }
  14. };

2.0.6 版本开始添加了 adapter 配置。

关于 Cookie 的配置请见 配置

Session 读写

Controller 或 Logic 里可以通过下面的方式读写 Session:

读取 Session
  1. export default class extends think.controller.base {
  2. async indexAction(){
  3. //获取session
  4. let value = await this.session('userInfo');
  5. }
  6. }
设置 Session
  1. export default class extends think.controller.base {
  2. async indexAction(){
  3. //设置 session
  4. await this.session('userInfo', data);
  5. }
  6. }
清除 Session
  1. export default class extends think.controller.base {
  2. async indexAction(){
  3. //清除当前用户的 session
  4. await this.session();
  5. }
  6. }

http 对象上可以通过 http.session 方法读写 Session,具体请见 API -> http

扩展 Session

可以通过下面的命令创建 Session Adapter:

  1. thinkjs adapter session/foo

会创建文件 src/common/adapter/session/foo.js,需要实现下面的方法:

  1. export default class extends think.adapter.session {
  2. /**
  3. * init
  4. * @param {Object} options []
  5. * @return {} []
  6. */
  7. init(options){
  8. }
  9. /**
  10. * 获取 Session
  11. * @param {String} name []
  12. * @return {Promise} []
  13. */
  14. get(name){
  15. }
  16. /**
  17. * 设置 Session
  18. * @param {String} name []
  19. * @param {Mixed} value []
  20. */
  21. set(name, value){
  22. }
  23. /**
  24. * 删除 Session
  25. * @param {String} name []
  26. * @return {Promise} []
  27. */
  28. delete(name){
  29. }
  30. /**
  31. * 更新 Session
  32. * @return {Promise} []
  33. */
  34. flush(){
  35. }
  36. /**
  37. * 清除过期的 Session
  38. * @return {Promise} []
  39. */
  40. gc(){
  41. }
  42. }

框架里的 Session 实现请见 https://github.com/75team/thinkjs/tree/master/src/adapter/session

使用第三方 Session Adapter

如何使用第三方的缓存 Adapter 请参见 Adapter -> 介绍

原文: https://thinkjs.org/zh-cn/doc/2.2/adapter_session.html