【问题标题】:Catch Flask-KVSession timeout捕捉 Flask-KVSession 超时
【发布时间】:2017-11-27 18:15:29
【问题描述】:

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

【问题讨论】:

    标签: python flask flask-kvsession


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多