如何使用Flask-KVSession管理清理过期的会话?

时间:2013-04-16 00:59:27

标签: session flask

来自cleanup_sessions()的文档http://flask-kvsession.readthedocs.org/en/0.3.1/,它说应该定期调用此方法来清理过期的会话。

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

如果我不定期清理它会有什么不良影响?

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

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

3 个答案:

答案 0 :(得分:2)

如果您使用RedisStore,KVSession将选择烧瓶配置项PERMANENT_SESSION_LIFETIME并自动进行会话清理。仅适用于不支持TimeToLiveMixin接口的后端,您必须手动完成。

  

到期会议   会话将过期,导致它们无效。要从后端自动删除,该后端必须支持TimeToLiveMixin接口;支持它的示例后端是RedisStore和MemcacheStore。

     

当使用不具有生存时间支持的不同后端(例如通过FilesystemStore的平面文件)时,可以定期调用cleanup_sessions()以删除未使用的会话。

答案 1 :(得分:2)

您可以注册&after; {after_request'或者' before_request'定期处理清理工作。

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

答案 2 :(得分:0)

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

就安排清理而言,只需使用运行cleanup_sessions的cron或upstart创建每日脚本。或者,您也可以修改simplekv以设置密钥的过期时间:https://github.com/mbr/simplekv/blob/master/simplekv/memory/redisstore.py