django限制用户重复登陆

总体思路:

找出所有有效的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

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值