打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Session

Session

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

支持的 Session 类型

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

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

  DROP TABLE IF EXISTS `think_session`;  CREATE TABLE `think_session` (    `id` int(11) unsigned NOT NULL AUTO_INCREMENT,    `cookie` varchar(255) NOT NULL DEFAULT "",    `data` text,    `expire` bigint(11) NOT NULL,    PRIMARY KEY (`id`),    UNIQUE KEY `cookie` (`cookie`),    KEY `expire` (`expire`)  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

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

redis Session

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

Session 配置

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

export default {  type: "file",  name: "thinkjs", //对应 cookie 的名称  secret: "", //Session 对应的 cookie 是否需要加密  timeout: 24 * 3600, //过期时间,默认为一天  cookie: { // cookie options    length: 32  },  adapter: {    file: {      path: think.RUNTIME_PATH + "/session"    }  }};

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

关于 Cookie 的配置请见 配置

Session 读写

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

读取 Session
export default class extends think.controller.base {  * indexAction(){    //获取session    let value = yield this.session("userInfo");  }}
设置 Session
export default class extends think.controller.base {  * indexAction(){    //设置 session    yield this.session("userInfo", data);  }}
清除 Session
export default class extends think.controller.base {  * indexAction(){    //清除当前用户的 session    yield this.session();  }}

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

扩展 Session

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

thinkjs adapter session/foo

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

export default class extends think.adapter.session {  /**   * init   * @param  {Object} options []   * @return {}         []   */  init(options){  }  /**   * 获取 Session    * @param  {String} name []   * @return {Promise}      []   */  get(name){  }  /**   * 设置 Session   * @param {String} name  []   * @param {Mixed} value []   */  set(name, value){  }  /**   * 删除 Session   * @param  {String} name []   * @return {Promise}      []   */  delete(name){  }  /**   * 更新 Session   * @return {Promise} []   */  flush(){  }  /**   * 清除过期的 Session   * @return {Promise} []   */  gc(){  }}

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

使用第三方 Session Adapter

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
用Redis实现Session功能,实现单点登录
Cookie,Session
最全的Java笔试题库之选择题篇-总共234道【121~180】
项目开发流程(电商)
多项目API共用session说明
使用websocket遇到的一个小问题 The remote endpoint was in state [TEXT
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服