私はこのsnippitに基づいSQLAlchemyのフラスコ中に、サーバー側のセッションを実装:予想通りどのようsession.clear上のデータベースからフラスコHTTPセッションを削除するには、()
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がユーザーから削除されます。
ただし、セッションはデータベースから削除されません。関数を定義してsession.clear()
の代わりにこの関数を呼び出すのではなく、私のSqlAlchemySessionInterface
クラスでこのロジックを実装できることを期待していました。
同様に、sessions.pyコードでは、clear
への参照はなく、クッキーが削除される唯一の時間はif the session was modifiedです。
API documentation for sessionsは、方法がどのように機能するかを示していません。
誰でもとsession.clear()
にすべての私のコールを交換する以外に、これを達成する方法を知っているだろう:あなたは重複を削除したい場合は、あなたがlogout_user
で呼び出される関数を定義することができます
def clear_session():
sid = session.get('sid')
if sid:
db.session.query(DBSession).filter_by(sid=sid).delete()
db.session.commit()
session.clear()
可能性のある複製http://stackoverflow.com/questions/13735024/invalidate-an-old-session-in-flask – Ivan
@IvanCaiこの質問は、セッションを識別するデータベースレコードを削除することであり、クッキーを消去することではありません。 –