[英]How to share session between two django application?
我有两个django应用程序,它们在端口80
和9002
上的同一服务器上。 即url是www.abc.com
和www.abc.com:9002
都共享同一数据库postgresql进行身份验证。 我要在它们之间共享共享会话数据,以便登录到一个应用程序的用户可以自动登录另一应用程序。
我读了这些答案: 多个Django应用程序,共享身份验证以及如何在同一子域上获取不同的Django应用程序以共享会话cookie?
并在我的两个Django应用程序中执行了此操作:
添加了以下几行:
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.com
和somesubdomain.abc.com
, somesubdomain.abc.com
。
但是您的第二个应用程序(在本例中为www.abc.com:9002
)通过包含端口而不与www.abc.com
共享同一TLD。 因此,django认为www.abc.com:9002
和www.abc.com
是非常不同的域,而不是来自同一根.abc.com
。
如果我正在做这个,有几种可能的方法:
将两个应用程序合并为一个根django应用程序。 无论如何,Django应用都是模块化的,因此您可以创建一个ROOT_URL_CONF
和DJANGO_SETTINGS_MODULE
来指定这两个应用在相同域中的工作方式。 例如,您可以为每个应用程序附加一个不同的前缀URL。
您可以使用负载平衡器或反向代理(例如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.