-
Notifications
You must be signed in to change notification settings - Fork 11
session 中间件
Zongmin Lei edited this page Aug 21, 2018
·
2 revisions
内置的 session
中间件提供多存储引擎的 Session 支持,并且已内置支持基于 Memory 和 Redis 的存储引擎:
-
SessiionMemoryStore
内存存储引擎 -
SessiionRedisStore
Redis 存储引擎,通过传入 Redis 客户端实例实现存储,支持 ioredis 和 redis 模块 -
SimpleRedisClientOptions
简单 Redis 客户端,可以不依赖第三方模块的情况下实现 Redis 存储,直接在SessionRedisStore
初始化时指定{ host, port, db }
来代替client
参数即可
其基本用法如下:
import { Application, component } from "@leizm/web";
const app = new Application();
// 需要注意的是,引入 session 中间件前必须引入 cookieParser 中间件
app.use("/", component.cookieParser());
app.use("/", component.session({
/** 存储引擎实例 */
store: new component.SessiionRedisStore({
host: "127.0.0.1",
port: 6379,
}),
/** Cookie名称 */
name: ”web.sid“,
/** Cookie选项 */
cookie: { signed: true },
/** Session有效时间(单位:毫秒),此参数会覆盖cookie中的maxAge */
maxAge: 3600,
}));
app.use("/", async function (ctx) {
// 可通过 ctx.request.session 获取 Session 数据
console.log(ctx.request.session);
// 也可通过 ctx.session.data 获取 Session 数据
console.log(ctx.session.data);
// 另外可以通过 ctx.session 操作 Session
await ctx.session.reload();
await ctx.session.regenerate();
await ctx.session.destroy();
await ctx.session.touch();
});
内存存储引擎只适合开发测试用途,不推荐在生产环境中使用。
其初始化参数如下:
-
prefix
: key前缀,默认为sess:
-
client
: 客户端实例,目前支持redis
和ioredis
这两个模块的连接实例 -
serialize
: 数据序列化函数,默认使用 JSON -
unserialize
: 数据反序列化函数,默认使用 JSON
当不指定 client
参数时表示使用内置的简单 Redis 客户端,需要额外提供如下参数:
-
host
: Redis服务器地址,默认为127.0.0.1
-
port
: Redis服务器端口,默认为6379
-
db
: Redis服务器数据库号,默认为0
-
password
: Redis服务器密码,默认无
只要实现了 component.SessionStore
接口的对象都可以作为 session({ store })
的参数:
interface SessionStore {
/**
* 获取session
* @param sid
*/
get(sid: string): Promise<Record<string, any>>;
/**
* 设置session
* @param sid
* @param data
* @param maxAge
*/
set(sid: string, data: Record<string, any>, maxAge: number): Promise<void>;
/**
* 销毁Session
* @param sid
*/
destroy(sid: string): Promise<void>;
/**
* 保持session激活
* @param sid
* @param maxAge
*/
touch(sid: string, maxAge: number): Promise<void>;
}