我需要能够在Flask-KVSession会话超时时进行记录。是否有一种简单的方法可以捕获会话超时并在发生时进行记录?
答案 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;
}