【问题标题】:Django session deletion effects another django applicationDjango 会话删除影响另一个 Django 应用程序
【发布时间】:2020-04-07 11:34:00
【问题描述】:

我有两个应用程序在具有不同端口的同一台服务器上运行,它们的 SQLite DB 也不同,用于存储用户会话数据。

if request.session.exists(stored_session_key) and stored_session_key != request.session.session_key:
    Session.objects.get(session_key=stored_session_key).delete()
request.user.logged_in_user.session_key = request.session.session_key
request.user.logged_in_user.save()

我正在使用这个条件,删除同一用户的上一个会话以从以前的设备注销并保持在当前设备的登录。

这按预期工作。

但我有两个逻辑相同的项目。

问题:

当我在同一个浏览器上打开两个应用程序时(例如:在 chrome 中,tab-1:https://ip_address:8000tab-2:https://ip_adress:8001),我可以一次登录到一个应用程序。当我尝试登录应用程序二(甚至打开应用程序二的登录页面)时,应用程序一正在注销。

为什么会出现这种行为以及如何解决?

我的假设:

当我在同一个浏览器中登录新应用程序时,浏览器正在向同一个正在运行的应用程序发送不同的 session_key?

【问题讨论】:

    标签: python django google-chrome session


    【解决方案1】:

    问题在于,为一个应用程序设置的会话 cookie 然后被发送到另一个应用程序,因为它们都在相同的主机名和路径上运行。因此,当您登录一个应用程序时,它会设置一个会话 cookie 来替换任何以前的 cookie,然后您将退出另一个应用程序。

    你有几个选择:

    1. 在不同的主机名上运行这两个应用程序(不同的端口是不够的)。

    2. 为您的一个应用程序指定一个不同的SESSION_COOKIE_NAME

    3. 为您的一个应用程序上的所有 URL 使用不同的路径,然后在该应用程序上配置 SESSION_COOKIE_PATH,使其会话 cookie 与其他应用程序分开。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-25
      • 2017-06-10
      • 2014-10-12
      相关资源
      最近更新 更多