Catch Flask-KVSession超时

时间:2017-11-27 18:15:30

标签: python flask flask-kvsession

我需要能够在Flask-KVSession会话超时时进行记录。是否有一种简单的方法可以捕获会话超时并在发生时进行记录?

1 个答案:

答案 0 :(得分:1)

你无法实时知道。会话ID存储在cookie中,cookie仅在发出请求时由浏览器发送。它不会发送已过期的cookie。如果没有收到有效的cookie,KVSession将不会加载会话。没有办法区分新会话和过期会话,因为它们都不会发送cookie。

扩展程序有一个cleanup_sessions方法,它会查看商店中的所有键并检查它们是否已过期,但必须定期手动调用,这不是自动过程。

您可以在删除过期的会话之前编写类似的日志记录方法,但您需要再次按照自己的计划运行此方法。以下是添加了日志记录的from flask import current_app from flask_kvsession import KVSessionExtension as _BaseKVSessionExtension, SessionID class KVSessionExtension(_BaseKVSessionExtension): def log_cleanup_sessions(self, app=None): if not app: app = current_app now = datetime.utcnow() for key in app.kvsession_store.keys(): m = self.key_regex.match(key) if not m: continue sid = SessionID.unserialize(key) if sid.has_expired(app.permanent_session_lifetime, now): app.logger.info('Removing session %s', key) app.kvsession_store.delete(key) 方法的副本。

import org.springframework.context.annotation.Import;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Import(RedisConfig.class)
@Import(HazelCastConfig.class)
public @interface EnableCaching
{
    Class cacheType() default Redis.class;
}