Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何让同一子域上的不同Django应用程序共享会话cookie?_Python_Django_Deployment_Session_Cookies - Fatal编程技术网

Python 如何让同一子域上的不同Django应用程序共享会话cookie?

Python 如何让同一子域上的不同Django应用程序共享会话cookie?,python,django,deployment,session,cookies,Python,Django,Deployment,Session,Cookies,我们在同一子域上部署了两个Django应用程序。一些超级用户需要在这些应用程序之间切换。我注意到,每次它们在应用程序之间跳转时,它们的会话cookie都会从Django收到一个新的会话ID 除了在一个复杂的工作流中,我很少使用Django会话表。如果用户在此工作流中在应用程序之间跳转,他们将丢失会话,必须重新开始 我翻阅了Django会话代码,发现: django.conf.settings.SECRET_密钥 用于在每次请求时对会话执行完整性检查。如果完整性检查失败,将创建一个新会话。意识到这

我们在同一子域上部署了两个Django应用程序。一些超级用户需要在这些应用程序之间切换。我注意到,每次它们在应用程序之间跳转时,它们的会话cookie都会从Django收到一个新的会话ID

除了在一个复杂的工作流中,我很少使用Django会话表。如果用户在此工作流中在应用程序之间跳转,他们将丢失会话,必须重新开始

我翻阅了Django会话代码,发现:

django.conf.settings.SECRET_密钥

用于在每次请求时对会话执行完整性检查。如果完整性检查失败,将创建一个新会话。意识到这一点,我更改了每个应用程序中的密钥以使用相同的值,认为这将允许完整性检查通过,并允许它们共享Django会话。然而,它似乎不起作用

有办法做到这一点吗?我还缺什么吗


提前感谢

我建议您为这两个应用程序设置不同的值。您的用户最初仍然需要登录两次,但他们的会话不会发生冲突-如果他们先登录到应用程序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应用程序在这一点上不要互相践踏会话。这就成功了。现在,我觉得有点傻,我没有考虑它自己:假设两个单独的数据库/模型,我想,也有必要在两个项目中克隆用户模型,并始终保持它们同步。在检索或修改用户实例时,手动选择相同的数据库(使用=…)非常重要。用户数据库表将在两个项目中创建,但实际上只有一个项目会被数据填充。想想这个问题。。。你同意吗?