SessionStore
interfaz
Almacén de sesiones. En producción SessionManager exige persistent: true, replace atómico y
revokeFamily. Meeko incluye MemorySessionStore (desarrollo), RedisSessionStore y
SqlSessionStore.
import type { SessionStore } from "@meekojs/meeko/server";Código fuente src/server/runtime/sessions.ts:135
Declaración #
interface SessionStore<T = unknown> {
readonly persistent?: boolean
get(id: string): Promise<SessionRecord<T> | undefined>
set(record: SessionRecord<T>): Promise<void>
delete(id: string): Promise<void>
replace?(previousId: string, record: SessionRecord<T>): Promise<boolean>
revokeFamily?(familyId: string): Promise<void>
subscribeRevocations?(listener: (familyId: string) => void): Unsubscribe | Promise<Unsubscribe>
rateLimit?(key: string, windowMs: number): Promise<RateLimitHit>
close?(): Promise<void>
}Parámetros de tipo #
-
T= unknown Datos de la aplicación en la sesión.
Ejemplo #
import type { SessionRecord, SessionStore } from "@meekojs/meeko/server";
class LoggingStore<T> implements SessionStore<T> {
readonly persistent = true;
constructor(private readonly inner: Required<SessionStore<T>>) {}
get(id: string) { return this.inner.get(id); }
set(record: SessionRecord<T>) { return this.inner.set(record); }
delete(id: string) { return this.inner.delete(id); }
replace(previousId: string, record: SessionRecord<T>) { return this.inner.replace(previousId, record); }
async revokeFamily(familyId: string) { console.info("revoke", familyId); await this.inner.revokeFamily(familyId); }
}Miembros #
persistent
#
readonly persistent?: booleanDeclara de forma explícita que los registros sobreviven a los reinicios del proceso.
get
#
get(id: string): Promise<SessionRecord<T> | undefined>Lee la sesión activa con ese ID, o undefined si no existe, caducó o ya no es la activa de su familia.
replace
#
replace?(previousId: string, record: SessionRecord<T>): Promise<boolean>Sustituye de forma atómica un ID existente de la misma familia; false si ya no existe.
revokeFamily
#
revokeFamily?(familyId: string): Promise<void>Revoca de forma atómica el ID activo de la familia, aunque el handle sea anterior a una rotación.
subscribeRevocations
#
subscribeRevocations?(listener: (familyId: string) => void): Unsubscribe | Promise<Unsubscribe>Notifica las llamadas a revokeFamily de todas las instancias que comparten el store, para que
se detengan las peticiones en curso y los sockets de esa familia. Se resuelve cuando las
notificaciones ya llegan.
rateLimit
#
rateLimit?(key: string, windowMs: number): Promise<RateLimitHit>Cuenta una petición en la ventana fija key de windowMs milisegundos y devuelve el total de
la ventana y cuánto falta para la siguiente (desde 1.2). Lo usa la opción rateLimit de API y
RPC; debe ser atómico entre instancias y rechazar si el almacenamiento falla, para que la
petición se rechace. Sin él, los límites se cuentan en la memoria de cada instancia.
Véase también #
- Sesiones y seguridad Framework full-stack