2016-10-08 4 views
3

私はこの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() 
+0

可能性のある複製http://stackoverflow.com/questions/13735024/invalidate-an-old-session-in-flask – Ivan

+0

@IvanCaiこの質問は、セッションを識別するデータベースレコードを削除することであり、クッキーを消去することではありません。 –

答えて

0

その機能を使用すると、データベースからセッションレコードを削除することも、session.clear()を削除することもできます。

\logoutまたは適切な場所でこの関数を呼び出します。

関連する問題