【问题标题】:Sharing cookies across domains and subdomains跨域和子域共享 cookie
【发布时间】:2016-12-12 18:22:25
【问题描述】:

我正在尝试使用 Django 和 django-tenant-schemas 实现多租户架构。

当我登录应用程序时,我已成功从http://app.mysite.com:8000/ 访问 baseapp 并设置了一个 cookie sessionId(仅限 http)。 (8000端口仅用于开发)

我现在正尝试向http://tenant1.mysite.com:8000/accounting/ 发出请求。但是,当我检查请求标头时,我发现即使在我的设置文件中,cookie 也没有设置:

SESSION_COOKIE_DOMAIN = ".mysite.com"
CSRF_COOKIE_DOMAIN = ".mysite.com"

我的印象是,将我的 cookie 域设置为 .mysite.com 将允许访问子域。我在这里错过了什么?

【问题讨论】:

  • 您想共享用户会话或一些 cookie 值?
  • @sideffect sessionId 存储在cookie中
  • 如果您想要共享 cookie(不是特定密钥)或用户会话,请查看上面的链接,您在 SESSION_COOKIE_NAME 中的设置是什么

标签: django cookies multi-tenant


【解决方案1】:

我知道这有点旧,但万一有人来到这里想知道类似的问题,可能设置了 cookie,但 SessionMiddleware 没有为收到的会话 ID 找到有效会话。例如,如果您正在使用数据库会话后端并且您碰巧将django.contrib.sessions 放入您的TENANT_APPS 列表中,则可能会发生这种情况。在这种情况下,Django 将找不到任何会话,因为当您在 app.mysite.com 登录时,会话存储在与 app 租户对应的数据库模式中,当您尝试访问 tenant1.mysite.com 时,SessionMiddleware 会查找会话存储在 tenant1 架构中。

因此得出的结论是,如果您使用数据库后端存储会话,那么您应该将django.contrib.sessions 放入您的SHARED_APPS 列表中,而不是放入TENANT_APPS 列表中。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2011-11-27
    • 2013-02-13
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    相关资源
    最近更新 更多