跨域和子域共享Cookie

时间:2016-12-12 18:22:25

标签: django cookies multi-tenant

我正在尝试使用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将允许访问子域。我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

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

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

希望这有帮助。