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 是安全的。因为不是。用户可以将任何他想要的东西放在那里。解决方案通常是使用 Flask 会话,该会话使用用户无法修改的签名 cookie。

于 2013-01-17T19:14:01.647 回答