42

ドキュメントで提案されているコードでCookieを設定しました。

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オブジェクトは不変であることがわかりました。私は何をしますか?

4

3 に答える 3

62

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

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

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

于 2013-01-17T19:15:09.933 に答える
23

Flask.Response から delete_cookie() を利用できるようにすることができます。

resp.delete_cookie('username')

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

また、パス(デフォルトで「/」に設定) とドメイン(デフォルトで「なし」に設定)を追加することもできます。

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

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

Python インタープリターのスクリーンショット

于 2018-04-19T06:06:26.703 に答える
9

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

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

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

于 2013-01-17T19:14:01.647 に答える