web-dev-qa-db-ja.com

flaskセッションをクリアするにはどうすればよいですか?

フラスコをインポートするときに、sessionなどのモジュールをインポートします。

SecureCookieSessionは一種の辞書であり、セッションを使用してアクセスできます。

今、私はウェブサイトを構築しようとしたときに使用したすべてのジャンク変数をクリアしようとします。

Stackoverflowに関する回答の1つは、セッションの内容をクリアするためにsession.clear()などのコマンドを使用しました。しかし、そのようなコマンドは、そのようなコマンドが存在しないというエラーを出します。

SecureCookieSessionをクリアする方法と、サーバーをシャットダウンするかWebサイトを閉じるたびにセッションをクリアする方法を教えてください。

19
user4413310
from flask import session

session.clear()

私はこのようなセッションをフラスコで使用しますが、動作します。ただし、SecureCookieSessionは使用しませんが、役立つ場合があります。

62
Jerry Unkhaptay

セッションを繰り返して、セッションの各キーに対してsession.pop()を呼び出すこともできます。 Popはセッションから変数を削除するので、秘密鍵を更新し続ける必要はありません。

for key in session.keys():
     session.pop(key)
19
TheF1rstPancake

Jerry Unkhaptay's answer で指摘されているように、対応する Flask documentation section で指摘されているように、次のことが簡単にできます:

from flask import session

session.clear()

しかし、かなり公平に、コメントで指摘されているように、 alejandro によって:

アプリケーションでフラッシュメッセージも使用している場合、フラッシュメッセージはsessionに保存されているため、sessionをクリアするとフラッシュ前に消去できることを考慮する必要があります。

私の提案は、リストの理解を活用することです。

[session.pop(key) for key in list(session.keys())]

これは、基本的に TheF1rstPancake's answer と同じforループですが、1ライナーです。フラッシュされたメッセージを除くすべてをsessionから削除できます(または、他の条件を追加することもできます)。

[session.pop(key) for key in list(session.keys()) if key != '_flashes']
9
Filipp W.