django限制使用者重複登陸

只愛一個人發表於2017-09-18

總體思路:

找出所有有效的session,然後從session中反解出所對應的使用者資訊,判斷當前待登陸的使用者是否已存在有效的session,如果有,則代表已登陸過,否則未登入。

程式碼實現:

from django.contrib.sessions.models import Session

from djang.utils import timezone

valid_session_obj_list = Session.objects.filter(expire_date__gt=timezone.now())

logged_user_id_list = []

for session_obj in valid_session_obj_list:

    user_id = session.get_decoded().get("_auth_user_id")

    logged_user_id_list.append(user_id)

#logged_user_id_list為所有已登陸的使用者的id,根據id再分別獲取對應的使用者資訊即可。複製程式碼

注意:

django登陸過程簡化如下,驗證username/password,通過之後,在django_session表中生成一條記錄,正常情況下,使用者點選登出的時候,django會刪除剛才所生成的記錄;特殊情況,使用者直接關閉瀏覽器,此時需要將session設定成過期,需要在settings檔案裡設定SESSION_EXPIRE_AT_BROWSER_CLOSE = True,以此來保證關閉瀏覽器時退出登入,該情況下,django並不會刪除所生成的記錄,日積月累,django_session表中的資料越來越多,需要定期的執行python manage.py clearsessions來清除過期的session

相關文章