通过这种方式,我想设置我的cookie。但它没有设定。
@app.route('/')
def index():
res = flask.make_response()
res.set_cookie("name", value="I am cookie")
当我打印res
时,它显示<Response 0 bytes [200 OK]
但未设置Cookie
答案 0 :(得分:24)
您在设置cookie后返回响应。
@app.route('/')
def index():
resp = make_response(render_template(...))
resp.set_cookie('somecookiename', 'I am cookie')
return resp
这样Cookie会在您的浏览器中生成,但您可以在下次请求中获取此Cookie。
@app.route('/get-cookie/')
def get_cookie():
username = request.cookies.get('somecookiename')
答案 1 :(得分:1)
如果您使用其他工具查看它(例如,在Firefox或Chrome中按F12表示开发人员工具)或在呈现的响应中使用一段JavaScript代码,则您设置的cookie将可见。
通过浏览器本身(JavaScript)或作为服务器的响应,在浏览器上设置Cookie。
差异非常重要,因为即使cookie是由服务器设置的,也可能不会在浏览器上设置cookie(例如:cookie被完全禁用或丢弃的情况)。
因此,即使服务器可能告诉“我设置了cookie”,该cookie可能也不会出现在浏览器中。
为确保服务器已设置cookie,需要浏览器的后续请求(请求头中包含cookie)。
因此,即使Flask的响应( res 变量)提到设置了cookie,我们也只能确定它是由服务器设置的,但浏览器将无法对其进行确认
高级 另一个方面是关于Flask或任何其他API如何创建响应。由于有效载荷(html /模板代码)和标头(cookie)是同时设置的,因此有效载荷内的“代码”(html /模板代码)可能无法访问cookie。 因此,您可能无法设置Cookie并将其显示在响应中。
一个想法可能是(能够)首先设置cookie和THEN来呈现上下文和设置顺序很重要-这样html / template才能知道已经设置的值。但是即使在这种情况下,也只有服务器确认它已设置cookie。
解决方案
@app.route('/')
def index():
res = flask.make_response()
res.set_cookie("name", value="I am cookie")
# redirect to a page that display the cookie
resp.headers['location'] = url_for('showcookies')
return resp, 302
答案 2 :(得分:0)
此响应将在您的浏览器中设置cookie
def func():
response = make_response( render_template() )
response.set_cookie( "name", "value" )
return response