Session 管理是比较复杂,Malagu 框架并没有提供一颗银弹解决任何复杂的业务场景,但提供了一套高度抽象的可扩展模型来满足大部分业务场景,特殊的场景可以通过框架提供的扩展点很方便的进行扩展。
设计图
Session
export interface Session {
id: string;
isNew: boolean;
expire: number;
maxAge: number;
readonly changed: boolean;
[key: string]: any;
toJSON(): any;
}
Session 中间件
Session 默认存储器是基于 Cookie 实现,所以 Session 中间件的优先级必须比 Cookie 中间件低。当您需要在自定义的中间件中获取 Session,请务必设置您的中间件的优先级低于 Session 中间件。
Session 管理器
Session 管理器实现一般情况下不需要扩展,Malagu 框架已经 Session 管理器经常变的逻辑抽象到了 Session 存储器和 Session 策略中,大家可以通过自己的 Session 存储器和 Session 策略来满足业务需求。
export interface SessionManager {
get(): Promise<Session>;
remove(): Promise<void>;
commit(): Promise<void>;
}
Session 存储器
Malagu 框架默认提供了基于 Cookie 存储的 Session 存储器,用户也可以实现基于 Redis 存储的 Session 存储器。
export interface SessionStore {
get(id: string): Promise<Session | undefined>;
set(session: Session): Promise<void>;
remove(id: string): Promise<void>;
}
Session 策略
export interface SessionStrategy {
valid(session: Session): Promise<boolean>;
create(obj?: any): Promise<Session>;
shouldSaveSession(session: Session): Promise<boolean>;
}
Session 配置属性
malagu:
session:
autoCommit: true
maxAge: 86400000
sessionIdKey: malagu:sessionId
sessionKey: malagu:session