【问题标题】:tornadoweb: storing cookies in database and retrieving themtornadoweb:将 cookie 存储在数据库中并检索它们
【发布时间】:2013-11-24 19:43:01
【问题描述】:

我有两个不同的 Web 应用程序,但身份验证仅由一个(使用 python 和 tornado)完成,我希望第二个应用程序透明地访问用户的凭据,目前我可以读取登录的 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

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

【问题讨论】:

    标签: cookies python-3.x tornado


    【解决方案1】:

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

    现在有两条路可以走。

    1. 在 cookie 中存储数据
      如您所见,Tornado 支持安全 cookie。这基本上意味着您可以将数据存储在 cookie 中并使用密钥对其进行签名。如果您的两个服务器具有相同的秘密,他们可以验证 cookie 数据没有被更改,并且您已成功在两个服务器之间分发数据。如果您需要在会话中存储大量数据,则这种分散式替代方案不适合。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多