Django 애플리케이션에는 다음과 같은 세션 관리 요구 사항이 있습니다.
- 사용자가 브라우저를 닫으면 세션이 만료됩니다.
- 세션은 비활성 기간이 지나면 만료됩니다.
- 비활성으로 인해 세션이 만료되는시기를 감지하고 사용자에게 적절한 메시지를 표시합니다.
- 비활성 기간이 끝나기 몇 분 전에 사용자에게 임박한 세션 만료를 경고합니다. 경고와 함께 사용자에게 세션을 연장 할 수있는 옵션을 제공합니다.
- 사용자가 서버에 요청을 전송하지 않는 앱 내에서 긴 비즈니스 활동을 수행하는 경우 세션이 시간 초과되지 않아야합니다.
문서, Django 코드 및 이와 관련된 블로그 게시물을 읽은 후 다음과 같은 구현 방법을 찾았습니다.
요구 사항 1
이 요구 사항은 SESSION_EXPIRE_AT_BROWSER_CLOSE를 True로 설정하여 쉽게 구현됩니다.
요구 사항 2
세션 만료 기간을 설정하기 위해 SESSION_COOKIE_AGE를 사용하기위한 몇 가지 권장 사항을 확인했습니다. 그러나이 방법에는 다음과 같은 문제점이 있습니다.
세션은 사용자가 응용 프로그램을 적극적으로 사용하고 있더라도 항상 SESSION_COOKIE_AGE가 끝나면 만료됩니다. (사용자 지정 미들웨어를 사용하여 모든 요청에 대해 세션 만료를 SESSION_COOKIE_AGE로 설정하거나 SESSION_SAVE_EVERY_REQUEST를 true로 설정하여 모든 요청에 세션을 저장하여 방지 할 수 있습니다. 그러나 다음 문제는 SESSION_COOKIE_AGE 사용으로 인해 불가피합니다.)
쿠키가 작동하는 방식으로 인해 SESSION_EXPIRE_AT_BROWSER_CLOSE 및 SESSION_COOKIE_AGE는 상호 배타적입니다. 즉, 쿠키는 브라우저를 닫을 때 또는 지정된 만료 시간에 만료됩니다. SESSION_COOKIE_AGE를 사용하고 쿠키가 만료되기 전에 사용자가 브라우저를 닫으면 쿠키가 유지되고 브라우저를 다시 열면 사용자 (또는 다른 사람)가 재 인증없이 시스템에 액세스 할 수 있습니다.
Django는 세션이 활성 상태인지 확인하기 위해 존재하는 쿠키에만 의존합니다. 세션과 함께 저장된 세션 만료 날짜를 확인하지 않습니다.
다음 방법을 사용하여이 요구 사항을 구현하고 위에서 언급 한 문제를 해결할 수 있습니다.
- SESSION_COOKIE_AGE를 설정하지 마십시오.
- 모든 요청에서 세션 만료 날짜를 '현재 시간 + 비활성 기간'으로 설정합니다.
- SessionMiddleware에서 process_request를 재정의하고 세션 만료를 확인합니다. 세션이 만료 된 경우 폐기하십시오.
요구 사항 3
세션이 만료되었음을 감지하면 (위의 사용자 지정 SessionMiddleware에서) 세션 만료를 나타내는 요청에 속성을 설정합니다. 이 속성은 사용자에게 적절한 메시지를 표시하는 데 사용할 수 있습니다.
요구 사항 4
JavaScript를 사용하여 사용자 비활성을 감지하고 경고를 제공하며 세션을 확장하는 옵션도 제공합니다. 사용자가 확장을 원하면 세션을 확장하기 위해 연결 유지 펄스를 서버에 보냅니다.
요구 사항 5
JavaScript를 사용하여 사용자 활동을 감지하고 (긴 비즈니스 운영 중) 세션 만료를 방지하기 위해 활성 상태 유지 펄스를 서버에 보냅니다.
위의 구현 접근 방식은 매우 정교 해 보이며 더 간단한 방법이 있는지 궁금합니다 (특히 요구 사항 2의 경우).
모든 통찰력을 높이 평가할 것입니다.