Session 如何使用会话清理过期的会话?

Session 如何使用会话清理过期的会话?,session,flask,Session,Flask,从cleanup\u sessions()的文档中可以看出,应该定期调用此方法来清理过期的会话 这是否意味着如果我不清理它,会话内存的使用将在应用程序的生命周期内扩展 如果我不定期清理,有什么不好的影响 在应用程序中安排定期清理的一些好方法是什么 我可以使用Redis作为存储后端并自动设置过期吗?您可以使用Redis,但它仍将存储过期的会话。存储过期会话的含义是浪费磁盘空间或RAM,这对于Redis来说尤其糟糕 至于安排清理,只需使用cron或upstart创建一个日常脚本,运行清理\u会话。或

cleanup\u sessions()
的文档中可以看出,应该定期调用此方法来清理过期的会话

这是否意味着如果我不清理它,会话内存的使用将在应用程序的生命周期内扩展

如果我不定期清理,有什么不好的影响

在应用程序中安排定期清理的一些好方法是什么


我可以使用Redis作为存储后端并自动设置过期吗?

您可以使用Redis,但它仍将存储过期的会话。存储过期会话的含义是浪费磁盘空间或RAM,这对于Redis来说尤其糟糕


至于安排清理,只需使用cron或upstart创建一个日常脚本,运行
清理\u会话
。或者,您也可以修改
simplekv
来设置键的过期时间:

如果使用Redistore,KVSession将选择烧瓶配置项PERMANENT\u SESSION\u LIFETIME并自动执行会话清理。仅对于不支持it TimeToLiveMixin接口的后端,您必须手动执行

即将到期的会话 会话将过期,导致会话无效。要从后端自动删除,该后端必须支持TimeToLiveMixin接口;支持此功能的后端示例有RedisStore和MemcacheStore

如果使用不同的后端而没有实时支持,例如通过FilesystemStore使用平面文件,则可以定期调用cleanup_sessions()以删除未使用的会话


您可以注册“请求后”或“请求前”以定期处理清理

from flask import Flask

from flask.ext.kvsession import KVSessionExtension
from simplekv.db.sql import SQLAlchemyStore
from sqlalchemy import create_engine, MetaData

# init app
app = Flask(__name__)

# init Flask-KVSession
engine = create_engine('mysql+pymysql://user:password@localhost/kvsession_db')
metadata = MetaData(bind=engine)
store = SQLAlchemyStore(engine, metadata, 'kvsession_table')
metadata.create_all()
kvsession_extension = KVSessionExtension(store, app)

# perdiocally cleanup expired sessions
import time
# do cleanup per day. You may store this value in app.config
SESSION_CLEANUP_INTERVAL = 60 * 60 * 24
deadline = None
@app.after_request
def cleanup_expired_sessions():
    global SESSION_CLEANUP_INTERVAL, deadline
    if deadline is None:
        kvsession_extension.cleanup_sessions(app)
        deadline = time.time() = SESSION_CLEANUP_INTERVAL
    else:
        if time.time() >= deadline:
            # time to do cleanup
            kvsession_extension.cleanup(app)
            # update deadline
            deadline = time.time() + SESSION_CLEANUP_INTERVAL

我认为
cleanup\u会话
需要在应用程序的同一实例中运行吗?运行
cleanup\u sessions
的Cron本身不需要应用程序的上下文知识就可以工作?您可以创建一个运行
cleanup\u sessions
的路由,并拥有一个在该路由上运行wget的Cron作业。