ThinkJS Session(會(huì)話)

2021-09-17 10:26 更新

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

支持的 Session 類型

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

db Session

使用 db 類型的 Session 需要?jiǎng)?chuàng)建對(duì)應(yīng)的數(shù)據(jù)表,可以用下面的 SQL 語(yǔ)句創(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 默認(rèn)配置如下,可以在 src/common/config/session.js 中進(jìn)行修改:

export default {
  type: "file",
  name: "thinkjs", //對(duì)應(yīng) cookie 的名稱
  path: runtimePrefix + "/session",  // file 類型下緩存文件的目錄
  secret: "", //Session 對(duì)應(yīng)的 cookie 是否需要加密
  timeout: 24 * 3600, //過(guò)期時(shí)間,默認(rèn)為一天
  cookie: { //Session 對(duì)應(yīng)的 cookie 配置項(xiàng)
    length: 32
  }
};

關(guān)于 Cookie 的配置請(qǐng)見 配置

Session 讀寫

Controller 或 Logic 里可以通過(guò)下面的方式讀寫 Session:

讀取 Session

export default class extends think.controller.base {
  * indexAction(){
    //獲取session
    let value = yield this.session("userInfo");
  }
}

設(shè)置 Session

export default class extends think.controller.base {
  * indexAction(){
    //設(shè)置 session
    yield this.session("userInfo", data);
  }
}

清除 Session

export default class extends think.controller.base {
  * indexAction(){
    //清除當(dāng)前用戶的 session
    yield this.session();
  }
}

http 對(duì)象上可以通過(guò) http.session 方法讀寫 Session,具體請(qǐng)見 API -> http。

擴(kuò)展 Session

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

thinkjs adapter session/foo

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

export default class extends think.adapter.session {
  /**
   * init
   * @param  {Object} options []
   * @return {}         []
   */
  init(options){

  }
  /**
   * 獲取 Session 
   * @param  {String} name []
   * @return {Promise}      []
   */
  get(name){

  }
  /**
   * 設(shè)置 Session
   * @param {String} name  []
   * @param {Mixed} value []
   */
  set(name, value){

  }
  /**
   * 刪除 Session
   * @param  {String} name []
   * @return {Promise}      []
   */
  delete(name){

  }
  /**
   * 更新 Session
   * @return {Promise} []
   */
  flush(){

  }
  /**
   * 清除過(guò)期的 Session
   * @return {Promise} []
   */
  gc(){

  }
}

框架里的 Session 實(shí)現(xiàn)請(qǐng)見 https://github.com/75team/thinkjs/tree/master/src/adapter/session。

使用第三方 Session Adapter

如何使用第三方的緩存 Adapter 請(qǐng)參見 Adapter -> 介紹

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)