我正在使用Python和Google App Engine开展关于Web应用程序开发的Udacity课程。在设置cookie(计算访客数量)和散列的课程中,我注意到一些令我困惑的事情:
为了好玩,我决定在添加1次访问之前和之后打印出“访问”的cookie值。这是输出:
5|e4da3b7fbbce2345d7772b0674a318d5 [[[this is cookie before adding 1 to it]]
You've been here 6 times! [[this is printed after adding 1 to cookie, but is not the cookie]]
5|e4da3b7fbbce2345d7772b0674a318d5 [[this is printing the cookie after one has been set using "Set-Cookie"]]
中间的6是正确的。使用cookie查看器我已经验证它与cookie匹配。所以第一行中的“5”也是正确的(因为这行是在添加1之前读取cookie)。
让我感到困惑的是,我在添加1后打印出cookie值,并且STILL打印“5” - 即使cookie已经重置为6。
为什么?在正确读取新cookie之前是否需要刷新浏览器?
以下是有问题的代码: class CookiePage(BlogHandler): def get(self): self.response.headers ['Content-Type'] ='text / plain' 访问次数= 0 visits_cookie_str = self.request.cookies.get('visits') self.write(visits_cookie_str)#这是第一行打印 self.write( “\ n” 个)
if visits_cookie_str:
cookie_val = check_secure_val(visits_cookie_str)
visits = int(cookie_val)
visits += 1
new_cookie_val = make_secure_val(str(visits))
self.response.headers.add_header('Set-Cookie', 'visits=%s' % new_cookie_val)
self.write("You've been here %s times!\n" % visits) # this is the 2nd line printed
cookie = self.request.cookies.get('visits')
self.write(cookie) # this is the 3rd line printed which SHOULD match the one above it but doesn't
答案 0 :(得分:1)
Cookie存储在浏览器发出请求时发送的标头中,如果您在服务器上设置了Cookie,则该Cookie的值通常在 next 请求之前不可用浏览器看到它后可以发送新的标头值。
<强>更新强>
看到你的代码之后,我所描述的情况确实是发生了什么。您在响应中设置了一个标头,该标头会发送回客户端以设置Cookie。但是,在请求完成处理之前,客户端将不会看到此cookie。 self.request
将不会更新,因为它会在设置Cookie之前反映当前正在处理的请求。
如果您想在请求期间跟踪值,则必须将其存储在某个变量中。