Django会话删除会影响另一个Django应用程序

问题描述 投票:1回答:1

我有两个应用程序在同一服务器上运行,它们具有不同的端口,它们的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中,我可以立即登录到一个应用程序。当我尝试登录应用程序2(甚至打开应用程序2的登录页面)时,应用程序1正在注销。

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

我的假设:

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

python django google-chrome session
1个回答
0
投票

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

您有几种选择:

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.