1
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

我有这个 cookie(我在一个 cookie 管理器中看到)

name: user_id
content: 30|a9bdc98e952c0e787aaf0e5466809eea71635d38446d30a9f71f2d15e99fa701

好吧,基本上问题是我无法检索已初始化的cookie。有什么理由吗?

4

1 回答 1

3

当直接使用“Set-Cookie”HTTP 标头设置 cookie 时,您还必须注意 cookie 属性(取决于您希望如何使用 cookie)。

在这种情况下,例如在路径中设置 cookie,/app/auth然后重定向到/app/login. 如果您没有明确指定浏览器假定的 cookie 路径/app/auth,因此在请求时不会发送 cookie /app/login。此行为在RFC 6265中指定(这比我在评论中引用的更新,但现在确切的算法包含在第 5.1.4 节中)。

要设置路径(或任何其他 cookie 属性),您可以附加以分号分隔的名称=值对的列表。在这种情况下,您希望将路径设置为/(可能与 不同/app):

self.response.headers.add_header('Set-Cookie','user_id=%s; Path=/'% id_and_hash)

当然,大多数库/框架已经为“Set-Cookie”标头提供了一个包装器。在“webapp2”的情况下,您可以设置 cookie response.set_cookie

self.response.set_cookie('user_id', id_and_hash)

它会自动设置路径,/因此您不必担心它(它也可以正确转义值)。

于 2012-05-14T05:13:40.067 回答