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