当 Flask-KVSession 会话超时时,我需要能够记录。有没有一种简单的方法来捕获会话超时并在它们发生时记录?
问问题
275 次
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 回答