当前位置:  开发笔记 > 编程语言 > 正文

如何在相同的子域上获得不同的Django应用程序来共享会话cookie?

如何解决《如何在相同的子域上获得不同的Django应用程序来共享会话cookie?》经验,为你挑选了2个好方法。

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

除了在一个复杂的工作流程中,我不会使用Django会话表.如果用户在此工作流程中在应用程序之间跳转,则会丢失会话并且必须重新开始.

我挖掘了Django会话代码并发现:

django.conf.settings.SECRET_KEY

用于对每个请求的会话执行完整性检查.如果完整性检查失败,则会创建新会话.实现这一点,我更改了每个应用程序中的密钥以使用相同的值,认为这将允许完整性检查通过并允许它们共享Django会话.但是,它似乎没有用.

有没有办法做到这一点?我错过了别的什么吗?

提前致谢



1> AdamKG..:

我反而建议你设置SESSION_COOKIE_NAME不同的值,这两个应用程序.您的用户最初仍需要登录两次,但他们的会话不会发生冲突 - 如果他们登录到应用A,然后是应用B,然后返回A,他们仍会进行A会话.

Django实例之间的共享会话可能不是一个好主意.如果你想要某种单点登录,请查看类似django-cas的内容.你仍然会有2个会话(你应该这样做),但用户只会登录一次.



2> zellyn..:

我同意在Django实例之间共享会话可能不是一个好主意.如果你真的想,你可以:

确保两个django应用程序共享相同的SECRET_KEY

确保两个django应用程序共享相同的SeSSON_COOKIE_NAME

确保将SESSION_COOKIE_DOMAIN设置为允许两个实例共享cookie的内容.(如果它们真的共享相同的子域,那么您当前的设置可能没问题.)

确保两个Django实例使用相同的会话后端(相同的数据库,相同的文件目录,相同的memcached配置等)

确保放入会话的任何内容在Django数据库中都有意义:至少,这将包括用户ID,因为Django auth使用它来记住哪个用户登录.

所有这一切,我还没有尝试过这一切,所以你可能仍然有麻烦!

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有