Python 为什么设置cookie不设置cookie,而是在烧瓶中不返回任何cookie?

Python 为什么设置cookie不设置cookie,而是在烧瓶中不返回任何cookie?,python,flask,cookies,Python,Flask,Cookies,我试图在flask环境中为我的webapp设置cookie,但由于未知原因,未设置cookie,并且未显示任何错误。我在一年前也尝试过同样的方法,它完美无瑕,但不知何故,它已经不起作用了 此代码作为一个单独的函数写入app.py文件,该文件在其他@app.route函数中调用,以获取用户id值 烧瓶调试代码 user_id = None user_id = request.cookies.get('nuid') if user_id is None: response = make_re

我试图在flask环境中为我的webapp设置cookie,但由于未知原因,未设置cookie,并且未显示任何错误。我在一年前也尝试过同样的方法,它完美无瑕,但不知何故,它已经不起作用了

此代码作为一个单独的函数写入app.py文件,该文件在其他@app.route函数中调用,以获取用户id值

烧瓶调试代码

user_id = None
user_id = request.cookies.get('nuid')
if user_id is None:
    response = make_response()
    print(user_id)
    response.set_cookie('nuid', value=cookie.nuid())
    print(cookie.nuid())
    user_id = request.cookies.get('nuid')
    print(user_id)
    return response
print(user_id)
return user_id
输出

None
76fbacf3e38090f86acb7dcfd8b36da2
None

nuid()是一个创建的函数,它将创建一个新的随机字符串。(这一点很好,没有问题)。

我确信有人比我有更准确的答案,但根据我的经验,
请求
对象中的任何词典都是不可变的,这意味着你不能对它们进行写操作。我的猜测是,在请求处理函数存在之前,设置cookie实际上不会执行。然后,您将在下一个请求中看到cookie

编辑:

request
对象包含有关从客户端传入的请求的信息。调用
user\u id=request.cookies.get('nuid')
时,您正在检查不可变字典
cookies
(它是
request
对象的属性)是否具有
'nuid'
键。它返回
None
,因为客户端没有在请求中发送一个

然后,您将创建一个cookie并将其设置为
response
对象,这意味着您对客户端的响应将包括
nuid
键和cookie作为其值。但是,这并不意味着用户发送给您的原始请求包含
nuid
键,因此当您调用
user\u id=request.cookies.get('nuid')
时,它仍然返回
None
一旦客户端的请求被解析为
请求
对象,该对象就无法更改。


如果在随后的请求中,客户端选择使用您在
响应
对象中提供的键
'nuid'
将cookie返回给您,那么
user\u id=request.cookies.get('nuid')
将返回cookie的值。

我们在代码中的任何地方都没有使用字典,cookie.nuid()返回输出中显示的字符串。response.set\u cookie('nuid',value=cookie.nuid())这是一种设置cookie值的格式,cookie值会在删除日期自动过期。我会通知编辑后的答案并完全理解您的意思,但问题是即使在函数运行之后,当我在浏览器中检查cookie值时,仍然显示没有此类cookie,即response.set_cookie不工作。