ThinkJS Session(會話)

2021-09-17 10:26 更新

需要用戶登錄的網(wǎng)站基本上都離不開 Session,ThinkJS 里默認支持多種類型的 Session,如:file,db,redis 等。

支持的 Session 類型

  • base 內(nèi)存方式
  • file 文件類型
  • db 數(shù)據(jù)庫類型
  • redis Redis 類型

db Session

使用 db 類型的 Session 需要創(chuàng)建對應的數(shù)據(jù)表,可以用下面的 SQL 語句創(chuàng)建:

  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 配置中的數(shù)據(jù)表前綴。

redis Session

使用 redis 類型的 Session 需要配置 Redis,具體見 配置。

Session 配置

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

export default {
  type: "file",
  name: "thinkjs", //對應 cookie 的名稱
  path: runtimePrefix + "/session",  // file 類型下緩存文件的目錄
  secret: "", //Session 對應的 cookie 是否需要加密
  timeout: 24 * 3600, //過期時間,默認為一天
  cookie: { //Session 對應的 cookie 配置項
    length: 32
  }
};

關(guān)于 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

可以通過下面的命令創(chuàng)建 Session Adapter:

thinkjs adapter session/foo

會創(chuàng)建文件 src/common/adapter/session/foo.js,需要實現(xiàn)下面的方法:

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 實現(xiàn)請見 https://github.com/75team/thinkjs/tree/master/src/adapter/session

使用第三方 Session Adapter

如何使用第三方的緩存 Adapter 請參見 Adapter -> 介紹。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號