2012-02-13 1 views
8

보안상의 이유로 SESSION_EXPIRE_AT_BROWSER_CLOSE을 true로 설정합니다.SESSION_EXPIRE_AT_BROWSER_CLOSE 및 SESSION_COOKIE_AGE의 동작을 결합하는 방법이 있습니까

그러나 브라우저 길이의 쿠키 (사용자가 브라우저를 종료하자마자 만료되는 쿠키)에는 만료 시간이 없으므로 SESSION_COOKIE_AGE은 효과가 없습니다 (예, 확인합니다). 하지만 브라우징 클로즈 (close)시 로그 아웃하기 위해 비 활동 플러스에 로그 아웃/타임 아웃을 설정하고 싶습니다.

내 질문은 브라우저 길이 쿠키 시나리오에서 비활성 시간 제한/로그 아웃을 구현하는 가장 좋은 방법은 무엇입니까?

답변

16

설명대로 SESSION_EXPIRE_AT_BROWSER_CLOSE 및 SESSION_COOKIE_AGE는 호환되지 않습니다. 만기일을 쿠키로 설정하면이 쿠키는 브라우저 길이의 쿠키가되지 않습니다.

그런 다음 원하는 동작을 수행하려면 을 SESSION_EXPIRE_AT_BROWSER_CLOSE을 True로 설정하고 만료 시간 제한을 손으로으로 설정해야합니다.

손으로 제어하는 ​​우아한 방법은 시간 제한이 만료 :

  1. 가 타임 아웃을 제어하는 ​​새로운 custom middleware을 만듭니다.
  2. 맞춤 미들웨어 (및 세션)를 활성화하려면 settings.py를 수정하십시오.

    class timeOutMiddleware(object): 
    
        def process_request(self, request): 
         if request.user.is_authenticated(): 
          if 'lastRequest' in request.session:    
           elapsedTime = datetime.datetime.now() - \ 
               request.session['lastRequest'] 
           if elapsedTime.seconds > 15*60: 
            del request.session['lastRequest'] 
            logout(request) 
    
          request.session['lastRequest'] = datetime.datetime.now() 
         else: 
          if 'lastRequest' in request.session: 
           del request.session['lastRequest'] 
    
         return None 
    

    lastRequest를 저장하기 위해 sessions을 가능하게 기억 :

시간 제한 지정 미들웨어 캔처럼 보인다.

이 솔루션은 작성되었으며 테스트되었으며 현재 내 사이트에서 작업 중입니다.) ... 장고 1.6 (뉴

... 2 년 후)

날짜 시간하고 PickleSerializer를 사용하는 경우 timedelta 값은 직렬화이다;이 코드는 GNU 라이센스를 가지고있다. 그렇지 않다면 아마도 쉬운 해결책은 translate datetime to unix timestamp and back입니다. 이 번역 아래에 자유롭게 게시하십시오.

편집

django-session-security 응용 프로그램은 비활성 인증 된 사용자를 로그 아웃 할 수있는 메커니즘을 제공합니다. 보세요.

+0

매력처럼! 고마워! – laffuste

+0

홍콩에 거주 하시겠습니까? – danihp

+0

Empece a viajar 아니 아니 quise volver;) para como han dejado el pais politicos y banqueros ... – laffuste