總體思路:
找出所有有效的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
。