Django에서 비활성으로 인해 세션을 만료하는 방법은 무엇입니까?

| | | | | | | | | | | | | | | | | |

Django 애플리케이션에는 다음과 같은 세션 관리 요구 사항이 있습니다.

  1. 사용자가 브라우저를 닫으면 세션이 만료됩니다.
  2. 세션은 일정 시간 사용하지 않으면 만료됩니다.
  3. 비활성으로 인해 세션이 만료되는 시기를 감지하고 사용자에게 적절한 메시지를 표시합니다.
  4. 비활성 기간이 끝나기 몇 분 전에 임박한 세션 만료를 사용자에게 경고합니다. 경고와 함께 사용자에게 세션을 연장할 수 있는 옵션을 제공합니다.
  5. 사용자가 서버로 전송되는 요청을 포함하지 않는 긴 비즈니스 활동을 앱 내에서 수행하는 경우 세션 시간이 초과되어서는 안 됩니다. .

문서, Django 코드 및 이와 관련된 일부 블로그 게시물을 읽은 후 다음 구현 접근 방식을 생각해 냈습니다.

요구 사항 1< /strong>
이 요구 사항은 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를 사용하여 사용자 비활성 감지, 경고 및 세션 연장 옵션 제공 사용자가 연장을 원하면 서버에 연결 유지 펄스를 보내 세션을 연장합니다.

요구 사항 t 5
JavaScript를 사용하여 사용자 활동(장기 비즈니스 작업 중)을 감지하고 세션 만료를 방지하기 위해 서버에 연결 유지 펄스를 보냅니다.


위의 구현 방식 매우 정교해 보이고 더 간단한 방법이 있는지 궁금합니다(특히 요구 사항 2의 경우).

통찰력은 높이 평가될 것입니다.