web-dev-qa-db-ja.com

フラスコ:クッキーを削除するには?

私はドキュメントで提案されたコードでクッキーを設定しました:

from flask import make_response

@app.route('/')
def index():
    resp = make_response(render_template(...))
    resp.set_cookie('username', 'the username')
    return resp

しかし、どうすれば削除できますか? remove_cookieメソッドはありません。私は試した:

if request.cookies.get('sessionID');
    request.cookies.pop('sessionID', None)

しかし、request.cookiesオブジェクトは不変であることがわかりました。私は何をしますか?

30
Oliver

Cookieを削除するためのHTTPヘッダーはありません。従来は、Cookieに有効期限が過去のダミー値を設定していたため、すぐに期限切れになりました。

resp.set_cookie('sessionID', '', expires=0)

これにより、セッションID Cookieがunixtimeで期限切れになる空の文字列に設定されます0、これはほぼ間違いなく過去のものです。

45
Eevee

過去の有効期限でCookieを設定する必要があります。

resp = make_response(render_template(...))
resp.set_cookie('username', expires=0)
return resp

ちなみに、ユーザー名のCookieが安全であることを実際に期待しないでください。そうではないので。ユーザーは自分が欲しいものを何でも入れられます。通常、解決策は、ユーザーが変更できない署名付きCookieを使用するFlaskセッションを使用することです。

8
ThiefMaster

フラスコ。レスポンスからdelete_cookie()を利用できるようにすることができます。

resp.delete_cookie('username')

これにより、応答時にCookieが削除されます。こちらが delete_cookieドキュメント です。

また、追加path(デフォルトは「/」に設定)およびdomain(デフォルトは[なし]に設定されています)。

resp.delete_cookie('username', path='/', domain='yourdomain.com')

以下は、flask.Response内のdelete_cookieオブジェクトを示すインタープリターのスクリーンショットです。

Python Interpreter Screenshot

4
Reck