0

当 Flask-KVSession 会话超时时,我需要能够记录。有没有一种简单的方法来捕获会话超时并在它们发生时记录?

4

1 回答 1

1

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

该扩展程序确实有一个cleanup_sessions方法,它将查看存储中的所有密钥并检查它们是否已过期,但这必须定期手动调用,这不是一个自动过程。

您可以在删除过期会话之前编写类似的方法来记录日志,但您需要再次按照自己的计划运行此方法。以下是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)
于 2017-11-27T18:22:13.937 回答