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

标签 python flask

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

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):
        ...

一切都按预期进行。当用户登录时,数据库中存储一个session,session id放在cookie中返回给用户。当用户注销时,调用 session.clear(),并从用户中删除 cookie。

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

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

API documentation for sessions也没有说明 clear 方法是如何工作的。

除了将我对 session.clear() 的所有调用替换为:

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

最佳答案

如果你想去除重复,你可以定义一个函数叫做logout_user

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

\logout 或任何合适的地方调用此函数。

关于python - 如何在 session.clear() 上从数据库中删除 Flask HTTP session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39928716/

相关文章:

javascript - 破坏 Chrome 缓存以进行浏览器同步重新加载

Python函数问题

python - 在 python 中实现消息框并在 windows 和 linux 中运行的更好方法

java - 相当于其他流行语言中的后期静态绑定(bind)(PHP)

python - Django:强制一个字段对于具有相同外键的所有模型对象都是唯一的

python - SSH 权限被拒绝 : using paramiko module inside my flask app and deployed same using mod_wsgi(Apache) mode

python - 在同一 Apache 服务器上运行 mod_wsgi (Flask) 应用程序和非 mod_wsgi 应用程序

asp.net - 在应用程序之间传递 Azure AD 身份验证

python - 将具有 x 列的数据帧插入 <x 列

python - 使用 Python Flask AJAX 动态更新图像