동일한 서버의 서로 다른 포트에서 두 개의 Django 애플리케이션 site1과 site2가 동시에 실행되고 동일한 브라우저의 서로 다른 탭에서 동시에 로그인하는 경우입니다. 그러면 site2에 로그인하면 site1에 로그인한 사용자가 쫓겨나게 됩니다.
왜 이런 일이 발생하는 걸까요? 이것은 Django의 세션 프레임워크와 관련이 있습니다. 다음은 간략한 소개입니다. Django 웹사이트를 처음 방문하면 Django는 현재 세션에 대한 일부 정보를 저장하기 위해 세션을 생성합니다. 동시에 해시 값 session_key가 생성되고 쿠키가 생성되어 클라이언트로 전송됩니다. 이 쿠키의 이름은 설정의 SESSION_COOKIE_NAME에 따라 설정됩니다. 기본값은 "sessionid"입니다(강조 추가). 이런 방식으로 다음번에는 session_key가 쿠키와 함께 서버로 전송됩니다. 서버는 session_key를 기반으로 해당 세션 객체를 검색하고 로그인 정보를 포함한 현재 세션의 정보를 획득합니다.
그래서 위 상황에 대한 진실은 단 하나입니다(코난이 안경으로 얼굴을 밀어냅니다):
site1에 로그인하면 sessionid라는 쿠키를 얻습니다. , session_key1을 저장합니다.
site2에 로그인하면 sessionid라는 쿠키가 업데이트되고 이제 그 값은 session_key2입니다(브라우저는 포트가 아닌 IP 기반으로 쿠키를 저장하므로 동일한 이름이 쿠키가 업데이트됩니다).
이제 새 session_key를 사용하여 site1에 액세스하면 원래 로그인 정보를 얻을 수 없으므로 다시 로그인해야 합니다.
그럼 어떻게 해결할 수 있을까요? 위의 메커니즘을 이해한 후, 설정에서 SESSION_COOKIE_NAME만 설정하면 됩니다. 예를 들어 site2에서 SESSION_COOKIE_NAME = 'site2'를 설정하고 site1에서 기본값을 사용할 수 있습니다. 물론 site1과 site2를 동시에 설정할 수도 있습니다.
동일한 서버에서 다른 포트를 사용하는 Django 애플리케이션을 동일한 브라우저에서 열 수 있도록 하는 방법에 대한 자세한 설명은 PHP 중국어 웹사이트의 관련 기사를 참고하세요!