tornadoweb:将cookie存储在数据库中并检索它们

时间:2013-11-24 19:43:02

标签: cookies python-3.x tornado

我有两个Web应用程序不同的东西,但身份验证只由一个(使用python和tornado)完成,id就像让第二个应用程序透明地访问用户的凭据,目前我可以读取登录的cookie用户通过标题:Access-Control-Allow-Credentials,那么我将如何访问cookie,所以我可以存储它(mongodb / redis / anywhere-but-mysql),并在第二个应用程序中检索它? 我试过的:

self.set_secure_cookie('cookie_name') # works i can see the cookie in subsequent request headers
self.get_secure_cookie("cookie_name") # just after setting the cookie returns None

我在想的是存储加密值并在以后的第二个应用程序中进行比较,这是否合理?我需要做的就是确保用户 登录后,它们目前存在于用户列表中。

1 个答案:

答案 0 :(得分:2)

所以你设法通过其中一个服务器设置一个cookie,然后在第二个服务器上检索它?如果是这样,太好了!这是最棘手的部分(imho)。

现在有两种方法可以去。

  1. 将数据存储在Cookie中 正如您所注意到的,龙卷风支持安全的Cookie。这基本上意味着您可以将数据存储在cookie中并使用机密签名。如果两台服务器具有相同的密钥,则可以验证cookie数据是否未更改,并且您已成功在两台服务器之间分配数据。如果您需要在会话中存储大量数据,则这种分散的替代方案不适用。

  2. 共享数据库(或其他服务器可以使用的API)
    如果您使用此解决方案,则只需在cookie中存储会话密钥。不需要使用安全cookie,因为它没有存储数据。您只需生成一个SSID,例如ssid = uuid.uuid4().hex,将其存储在名为ssid之类的cookie中,并将记录添加到数据库以及要存储的所有会话数据。我真的很喜欢Redis,因为你可以设置创建过期而不必担心它,它非常快,最好的事情就是有一个很好的,简单的异步lib你可以使用龙卷风。