Django + redis会话共享多个主机

时间:2015-05-18 09:23:13

标签: python django session redis django-redis

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

但是当我们尝试登录一个应用程序时,第二个应用程序永远不会获取会话数据。当2 django应用程序托管在同一主机上时,一切正常。我们尝试在settings.py中的两个应用上设置SESSION_COOKIE_DOMAIN但到目前为止没有任何成功。有没有人知道可能出现什么问题,或者给我一些关于如何在我的2个应用程序之间成功共享会话数据的线索?

以下是我们想要实现的小方案:

| ------------------------ |
| site1.domain.tld
| ------------------------ |
          |
          |
| ---------------------------- |
| Redis会议店
| ---------------------------- |
          |
          |
| ------------------------ |
| site2.domain.tld
| ------------------------ |

注意:两个应用的SESSION_COOKIE_DOMAIN都设置为“.domain.tld”,SECRET_KEY也是相同的。

此致

克莱门特。

1 个答案:

答案 0 :(得分:1)

相当长远,因为我不完全确定redis会话后端的内部工作方式,但是看一下它所调用的cache_key method of the default SessionStore_get_new_session_key方法,可以假设一个正在为每个服务器计算唯一的缓存密钥。

django文档explicitly states来自:

  

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

我建议您查看KEY_PREFIXKEY_FUNCTION设置,也许在两个服务器配置中明确设置值都会产生所需的效果。此外,通过查看redis会话存储的源代码,可以让您深入了解它是否以及如何处理密钥前缀。