class ...
self.response.headers.add_header('Set-Cookie','user_id = %s'% id_and_hash)
self.redirect("/app/login")
class ThanksHandler(webapp2.RequestHandler):
def get(self):
if 'user_id' in self.request.cookies:
self.response.out.write('user_id')
else:
self.response.out.write("wrong") // what i am getting
我有这个饼干(我在饼干经理中看到过)
name: user_id
content: 30|a9bdc98e952c0e787aaf0e5466809eea71635d38446d30a9f71f2d15e99fa701
好吧,基本上问题是我无法检索已初始化的cookie。有什么理由吗?
答案 0 :(得分:3)
使用“Set-Cookie”HTTP标头直接设置cookie时,您还必须处理cookie属性(取决于您希望如何使用cookie)。
在这种情况下,您可以在路径/app/auth
中设置Cookie,然后重定向到/app/login
。如果您没有明确指定cookie路径,则浏览器会假定/app/auth
,因此在请求/app/login
时不会发送cookie。此行为在RFC 6265中指定(这比我在评论中引用的更新,但现在确切的算法包含在5.1.4节中)。
要设置路径(或任何其他cookie属性),您可以附加以分号分隔的名称=值对的列表。在这种情况下,您希望将路径设置为/
(它可能与/app
不同):
self.response.headers.add_header('Set-Cookie','user_id=%s; Path=/'% id_and_hash)
当然,大多数库/框架已经为“Set-Cookie”标头提供了包装器。对于“webapp2”,您可以使用response.set_cookie
设置Cookie:
self.response.set_cookie('user_id', id_and_hash)
它会自动将路径设置为/
,因此您不必担心它(它也会正确地转义值)。