session/lib/redis-store.js

80 lines
1.5 KiB
JavaScript
Raw Normal View History

2020-09-18 18:25:56 +08:00
/**
* redis版会话管理
* @author yutent<yutent.io@gmail.com>
* @date 2020/09/18 16:35:26
*/
export default class Session {
constructor(store, opt, uuid) {
this.store = store
this.opt = opt
this.uuid = uuid
}
createSsid(ssid) {
if (ssid) {
if (!this.opt.jwt && this.opt.level > 0 && ssid !== this.uuid) {
ssid = this.uuid
}
} else {
ssid = this.uuid
}
this.ssid = ssid
// 设置session有效期
this.store.expire(ssid, this.opt.ttl)
}
start(ssid) {
this.createSsid(ssid)
return this.ssid
}
// 获取session字段值, 需要await指令
get(key) {
var defer = Promise.defer()
this.store.hgetall(this.ssid, (err, obj) => {
if (err) {
return defer.reject(err)
}
for (let i in obj) {
if (!obj[i]) {
continue
}
obj[i] = Number.parse(obj[i])
}
//不传key时,直接返回全部字段
if (!key) {
defer.resolve(obj)
} else {
defer.resolve(obj.hasOwnProperty(key) ? obj[key] : null)
}
})
return defer.promise
}
//设置session字段值
set(key, val) {
if (typeof key === 'object') {
for (let i in key) {
this.store.hset(this.ssid, i, key[i])
}
} else {
this.store.hset(this.ssid, key, val)
}
}
//删除单个字段
unset(key) {
this.store.hdel(this.ssid, key)
}
//清除个人session
clear() {
this.store.del(this.ssid)
}
}