2013-02-26 2 views
30

원래 로그인 login() 및 AuthenticationForm을 다시 사용하여 로그인 페이지에서 "remember me"옵션을 선택한 사용자의 쿠키 길이를 더 길게 설정할 수 있습니까? 나는 현재를 통해 내장 된 로그인을 사용하고 urls.pyDjango 로그인 정보 및 인증 양식이 내장 된 "Remember Me"

url(r'^login/$','django.contrib.auth.views.login', {'template_name': 'authentication/login.html'}, name='login'), 

체크 박스가 나의 login.html에서 구현됩니다

<label><input name="remember_me" type="checkbox">Keep me logged in</label> 

하지만 난을 통해 정보를 전달하는 방법을 잘 모르겠습니다 사용자가 로그인이 "나를 기억"경우

현재 django.contrib.auth.views.login에 AuthenticationForm은 선택하지 않은 상자, 쿠키 연령 settings.py

SESSION_COOKIE_AGE = 360 
01에 정의되어 있습니다

유사한 질문이 몇 개 발견되었지만 별도의 앱을 설치해야한다고 생각하지 않습니다. 아래의 코드 조각 (http://djangosnippets.org/snippets/1881/)는 유망한 듯하지만, 나는 단지 몇 개월 파이썬과 장고를 코딩하고 나는 그것이 작동하게 할 수 없습니다 :

def login(request, *args, **kwargs): 
    if request.method == 'POST': 
     if not request.POST.get('remember_me', None): 
      request.session.set_expiry(0) 
    return auth_views.login(request, *args, **kwargs) 
+0

스 니펫은 실제로 다른 방법으로 작동하지만 주 아이디어는 여전히 확인란 선택에 따라 쿠키 만료를 설정하는 것입니다. – Sawwy

+0

스 니펫이 정확합니다. 기억 된 로그인 만료시'SESSION_COOKIE_AGE'를 설정하고 일회용 로그인이 만료되면'request.session.set_expiry (0)'내에'0'을 설정하면됩니다. – okm

+0

자, 기본 세션 길이가 5 초이고 세션이 30 초 (테스트 목적으로 만)라는 것을 기억하십시오. 그러나 set_expiry (0)을 사용하면 브라우저를 닫을 때 세션이 삭제되지 않습니다 (탭이 아닌 전체 브라우저를 닫음). 문제는 1) django_session에서 삭제 (데이터베이스에서 모든 세션 정보 삭제) 2) 모든 브라우저 기록 삭제 (Chrome 25.0.1364.97). 처음부터 시작하지만 일단 사용자가 로그인하면 로그인 상태가 유지됩니다. 내가해야 할 일이 있습니까? – Sawwy

답변

14

장고 세션 쿠키 연령 seconds에 정의되어 있습니다.

SESSION_COOKIE_AGE = 360 

은 6 분 후에 세션이 만료됨을 의미합니다. 나는 최근 '내 계정 정보 기억'기능을 구현했고 나는 다음과 같은 설정 : 당신은 코드에서 보여준 것처럼

SESSION_COOKIE_AGE = 60 * 60 * 24 * 30 # One month 

로그인보기가 재정을 필요로한다.

그러나 브라우저를 닫을 때 (내가 기억하지 못하는 경우) 사용자가 다시 로그인 할 필요가없는 이상한 소리가 들리지만, set_expiry (0)를 사용하면 발생하지 않아야합니다. set_expiry (0)을 사용하면 django는 고정 길이 쿠키가 아닌 '세션'길이 쿠키를 설정하고 브라우저가 닫힌 후에 만료됩니다.

브라우저를 닫을 때 쿠키를 지우는 데 영향을주는 또 다른 설정이 있습니다. 어쩌면 SESSION_EXPIRE_AT_BROWSER_CLOSE 설정 값을 변경하거나 설정에서 기존 값을 확인해보십시오. https://docs.djangoproject.com/en/1.10/topics/http/sessions/#browser-length-sessions-vs-persistent-sessions

관련 문제