在同一个域内共享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也是相同的。
此致
克莱门特。
答案 0 :(得分:1)
相当长远,因为我不完全确定redis会话后端的内部工作方式,但是看一下它所调用的cache_key
method of the default SessionStore
和_get_new_session_key
方法,可以假设一个正在为每个服务器计算唯一的缓存密钥。
django文档explicitly states来自:
[...]在服务器之间或生产环境与开发环境之间共享缓存实例,一台服务器缓存的数据可能被另一台服务器使用。
我建议您查看KEY_PREFIX
和KEY_FUNCTION
设置,也许在两个服务器配置中明确设置值都会产生所需的效果。此外,通过查看redis会话存储的源代码,可以让您深入了解它是否以及如何处理密钥前缀。