Python 如何让同一子域上的不同Django应用程序共享会话cookie?
我们在同一子域上部署了两个Django应用程序。一些超级用户需要在这些应用程序之间切换。我注意到,每次它们在应用程序之间跳转时,它们的会话cookie都会从Django收到一个新的会话ID 除了在一个复杂的工作流中,我很少使用Django会话表。如果用户在此工作流中在应用程序之间跳转,他们将丢失会话,必须重新开始 我翻阅了Django会话代码,发现: django.conf.settings.SECRET_密钥 用于在每次请求时对会话执行完整性检查。如果完整性检查失败,将创建一个新会话。意识到这一点,我更改了每个应用程序中的密钥以使用相同的值,认为这将允许完整性检查通过,并允许它们共享Django会话。然而,它似乎不起作用 有办法做到这一点吗?我还缺什么吗Python 如何让同一子域上的不同Django应用程序共享会话cookie?,python,django,deployment,session,cookies,Python,Django,Deployment,Session,Cookies,我们在同一子域上部署了两个Django应用程序。一些超级用户需要在这些应用程序之间切换。我注意到,每次它们在应用程序之间跳转时,它们的会话cookie都会从Django收到一个新的会话ID 除了在一个复杂的工作流中,我很少使用Django会话表。如果用户在此工作流中在应用程序之间跳转,他们将丢失会话,必须重新开始 我翻阅了Django会话代码,发现: django.conf.settings.SECRET_密钥 用于在每次请求时对会话执行完整性检查。如果完整性检查失败,将创建一个新会话。意识到这
提前感谢我建议您为这两个应用程序设置不同的值。您的用户最初仍然需要登录两次,但他们的会话不会发生冲突-如果他们先登录到应用程序A,然后登录到应用程序B,然后返回到应用程序A,他们仍将拥有A会话
在Django实例之间共享会话可能不是一个好主意。如果您想要某种单点登录,请查看类似django cas的内容。您仍然有2个会话(您应该这样做),但用户只会登录一次。我同意在Django实例之间共享会话可能不是一个好主意。如果你真的想,你可以:
- 确保两个django应用程序共享相同的密钥
- 确保两个django应用程序共享相同的SeSSON\u COOKIE\u名称
- 确保会话\u COOKIE\u域设置为允许两个实例共享COOKIE的内容。(如果它们确实共享同一子域,则您当前的设置可能没有问题。)
- 确保两个Django实例使用相同的会话后端(相同的数据库、相同的文件目录、相同的memcached配置等)
- 确保在两个Django数据库中放入会话的任何内容都是有意义的:至少,这将包括用户id,因为Django auth使用该id来记住哪个用户登录
尽管如此,我还没有尝试过所有这些,所以你可能仍然有麻烦 这是个好建议,我试试看。对于SSO,这些是内部应用程序,它们与负责PHP会话中身份验证的遗留PHP应用程序集成,因此这不应该是一个问题。我真的只需要Django应用程序在这一点上不要互相践踏会话。这就成功了。现在,我觉得有点傻,我没有考虑它自己:假设两个单独的数据库/模型,我想,也有必要在两个项目中克隆用户模型,并始终保持它们同步。在检索或修改用户实例时,手动选择相同的数据库(使用=…)非常重要。用户数据库表将在两个项目中创建,但实际上只有一个项目会被数据填充。想想这个问题。。。你同意吗?