如何在session.clear()上从数据库中删除Flask HTTP会话

时间:2016-10-08 04:35:46

标签: python flask

我使用SQLAlchemy在Flask中实现了服务器端Session,基于此snippit

class SqlAlchemySession(CallbackDict, SessionMixing):
    ...

class SqlAlchemySessionInterface(SessionInterface):
    def __init__(self, db):
        self.db = db

    def open_session(self, app, request):
        ...

    def save_session(self, app, session, response):
        ...

一切都按预期工作。当用户登录时,会话存储在数据库中,会话ID放在cookie中并返回给用户。当用户注销时,将调用session.clear(),并从用户中删除cookie。

但是,会话不会从数据库中删除。我希望我可以在我的SqlAlchemySessionInterface类中实现这个逻辑,而不是定义一个函数并调用它来代替session.clear()

同样,在sessions.py代码中,没有对clear的任何引用,并且唯一一次删除Cookie是if the session was modified

API documentation for sessions也没有说明clear方法的工作原理。

除了将我对session.clear()的所有来电替换为:{/ p>之外,是否有人知道实现这一目标的方法

def clear_session():
    sid = session.get('sid')
    if sid:
        db.session.query(DBSession).filter_by(sid=sid).delete()
        db.session.commit()
    session.clear()

1 个答案:

答案 0 :(得分:0)

如果要删除重复,可以定义名为logout_user

的函数

在该功能中,您可以从数据库中删除会话记录以及session.clear()

\logout或适当的地方调用此函数。