본문 바로가기

Python/Django

Python Django: 동시 접속 로그인 막기 # session # session_key

728x90
반응형

Django를 통해서 동시 접속을 막기

 

원리:

로그인 할 때 생기는 session_key를 DB에 저장 하고, 새로 로그인이 될 때 기존 session_key를 유저의 DB에서 불러와서 
DB의 Session에서 해당 session_key를 지움으로써 기존 로그인은 해지 시키기

# models.py

class User(AbstractUser):
    username = models.CharField(max_length=150)
    session_key = models.CharField(max_length=40, null=True, blank=True)
# views.py

from django.contrib import auth

user = User.objects.get("로그인하려는 유저")

if user.session_key:
    Session.objects.filter(session_key=user.session_key).delete()

auth.login(request, user)
request.session.save()	## 중요!
user.session_key = request.session.session_key

로그인 요청이 들어온 user를 로그인 시키기 전에 해당 유저의 DB에 저장해놓은 session_key를 찾아서 DB에서 해당 session_key를 가진 Session을 지우면 기존 로그인 되어 있는 user의 Session을 지워서 강제로 로그인을 해지 시킬 수 있다.

 

코드에서 ## 중요! 로 주석을 단 부분은, request session을 명시적으로 저장을 하는 것인데,

위 코드를 넣지 않으면, session이 저장이 될때도 있고 안 될 때도 있어서

print(request.session.key)를 찍어보면 어쩔 때는 None이 나오고, 어쩔때는 값이 제대로 나오기도 한다.

따라서 명시적으로 session을 저장해줘야 한다.

728x90
반응형