繁体   English   中英

如何在两个Django应用程序之间共享会话?

[英]How to share session between two django application?

我有两个django应用程序,它们在端口809002上的同一服务器上。 即url是www.abc.comwww.abc.com:9002都共享同一数据库postgresql进行身份验证。 我要在它们之间共享共享会话数据,以便登录到一个应用程序的用户可以自动登录另一应用程序。

我读了这些答案: 多个Django应用程序,共享身份验证以及如何在同一子域上获取不同的Django应用程序以共享会话cookie?

并在我的两个Django应用程序中执行了此操作:

  1. 两者都使用了相同的密钥。
  2. 添加了以下几行:

    SESSION_ENGINE ='django.contrib.sessions.backends.signed_cookies'SESSION_COOKIE_NAME ='abc'
    SESSION_COOKIE_DOMAIN ='.abc.com'

但是我仍然无法达到目的。 如何在两个Django应用程序之间共享会话cookie,以便我可以进行共享身份验证?

除了必须将这些设置都应用到两个应用程序之外,您的方法唯一缺少的是SESSION_COOKIE_DOMAIN。

您将其设置为“ .abc.com”,这意味着如果您的应用具有域名: www.abc.comsomesubdomain.abc.comsomesubdomain.abc.com

但是您的第二个应用程序(在本例中为www.abc.com:9002 )通过包含端口而不与www.abc.com共享同一TLD。 因此,django认为www.abc.com:9002www.abc.com是非常不同的域,而不是来自同一根.abc.com

如果我正在做这个,有几种可能的方法:

  1. 将两个应用程序合并为一个根django应用程序。 无论如何,Django应用都是模块化的,因此您可以创建一个ROOT_URL_CONFDJANGO_SETTINGS_MODULE来指定这两个应用在相同域中的工作方式。 例如,您可以为每个应用程序附加一个不同的前缀URL。

  2. 您可以使用负载平衡器或反向代理(例如nginx或haproxy)为每个应用程序分配不同的子域,然后将每个应用程序部署在不同的端口中。 假设最终结果是您在first.abc.com部署了第一个django应用程序,并且在first.abc.com部署了第二个应用程序(所有应用程序在second.abc.com均具有端口80),然后它将共享相同的会话。 只要记住,您需要在后端分配应用程序使用的实际端口。

我的其他说明。 在生产设置中,您还想添加ALLOWED_HOSTS设置,并在列表中包括.abc.com

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM