2020-03-27

Django 10. 로그인 상태 유지하기 구현

사용자의 선택에 따라 클라이언트 프로세스 종료시에도 접속 상태를 유지할 수 있도록 구현합니다.


1. settings.py 설정

Dango의 login 세션은 기본적으로 브라우저 등과 같은 클라이언트의 프로세스를 종료해도 서버단에서 세션을 유지시키기 때문에 logout 함수 실행 전까지 사용자의 세션이 남아있게 됩니다. 로그인 창에서 Checkbox를 통해 사용자가 로그인 상태를 유지할 것인지 직접 선택하게 하기 위해 settings.py에 아래의 소스를 추가합니다.

1
2
3
# cs_web/settings.py

SESSION_EXPIRE_AT_BROWSER_CLOSE = True

위 소스를 추가함으로써 프로세스의 종료시 세션을 만료시키도록 설정합니다. default 설정은 False입니다.

*브라우저가 종료되었음을 서버에서 탐지할 수는 없으므로 브라우저가 그냥 종료될 때 세션이 만료되는 것이 아니라 프로세스는 살아있기에 프로세스를 종료해야 세션이 삭제됩니다.

Django Session 문서

2. views.py 수정

로그인 창에서 로그인 상태 유지 Checkbox를 통해 넘어온 값을 확인하여 settings.py의 세션 만료 설정을 False로 변경하는 소스를 views.pyLoginView 클래스 내 login(self.request, user) 소스 아래에 추가합니다.

1
2
3
4
5
6
7
8
9
10
# users/views.py

from django.conf import settings

if user is not None:
self.request.session['user_id'] = user_id
login(self.request, user)
remember_session = self.request.POST.get('remember_session', False)
if remember_session:
settings.SESSION_EXPIRE_AT_BROWSER_CLOSE = False

3. templates 수정

사용자가 로그인 상태 유지 checkbox를 선택하고 로그인을 진행할 시 view에서는 remember_session의 유무를 비교하도록 login.htmlform내부에 아래와 같이 remember_session이란 name 값을 가지는 checkbox를 추가합니다.

1
2
3
4
5
6
<!-- templates/users/login.html -->

<label>
<input type="checkbox" name="remember_session"/>
<span>로그인 상태 유지</span>
</label>

사용자의 로그인 상태유지 선택에 따라 세션 유지를 확인해보면 잘 적용되어 동작하는 것을 확인할 수 있습니다.

*전체 html, css 등은 자세하게 포스팅하지 않습니다. 제 Github에서 소스를 확인하실 수 있습니다.