Django + redis会话跨多主机共享



有两个django(相同的版本,相同的会话中间件)应用程序托管在同一域中的不同主机上,共享一个redis会话存储。

但是当我们在一个应用程序上尝试登录时,第二个应用程序永远不会获得会话数据。当两个django应用程序托管在同一个主机上时,一切都很好。我们尝试在settings.py中在两个应用程序上设置SESSION_COOKIE_DOMAIN,但到目前为止还没有成功。有没有人对什么可能是错误的线索或给我一些线索关于如何成功地共享会话数据之间我的2个应用程序?

下面是我们想要实现的一个小方案:

|------------------------|
| site1.domain。tld
|------------------------|
,,,,, |
,,,,, |
|----------------------------|
| Redis session store
|----------------------------|
,,,,, |
,,,,, |
|------------------------|
| site2.domain。tld
|------------------------|

注意:SESSION_COOKIE_DOMAIN设置为"。domain"。对于两个应用程序,和SECRET_KEY也是一样的。

问候,

克莱门特。

很长一段时间,因为我不完全确定redis会话后端的内部工作原理,但是看看默认的SessionStorecache_key方法和它调用的_get_new_session_key方法,可以假设每个服务器都计算一个唯一的缓存键。

django文档明确地说:

[…]在服务器之间或在生产环境和开发环境之间共享缓存实例,一个服务器缓存的数据可能被另一个服务器使用。

我建议您看一下KEY_PREFIXKEY_FUNCTION设置,也许显式地在两个服务器配置中设置值将产生所需的效果。此外,通过查看redis会话存储的源代码可能会给你有价值的见解,如果以及它如何处理键前缀。

相关内容

  • 没有找到相关文章

最新更新