【问题标题】:How to detect if user is still online with django session如何通过 django 会话检测用户是否仍然在线
【发布时间】:2021-02-24 03:59:30
【问题描述】:

我使用 Django 2.2 并尝试在用户关闭浏览器而不注销时检测用户是否仍然连接 我尝试使用一些 Django 包,如 qsessions,但它需要用 qsession 中间件替换'django.contrib.sessions.middleware.SessionMiddleware',,但它又犯了另一个错误 django.contrib.sessions.middleware.SessionMiddleware not found 我需要您的帮助来分别获取每个用户会话。

【问题讨论】:

    标签: python django authentication session middleware


    【解决方案1】:

    Django 会话的内容不应该被查询。会话中的用户 id 可以从会话中解码,但您需要遍历所有会话:

    from django.contrib.sessions.models import Session
    from django.utils import timezone
    
    def get_unexpired_sessions_for_user(user):
        user_sessions = []
        all_sessions = Session.objects.filter(expire_date__gte=timezone.now())
        for session in all_sessions:
            session_data = session.get_decoded()
            if user.pk == session_data.get('_auth_user_id'):
                user_sessions.append(session.pk)
        return Session.objects.filter(pk__in=user_sessions)
    

    这种方法可行,但当您的数据库中有大量会话时将无法执行。

    【讨论】:

    • 感谢 Stefan 的回答,但如果此功能会使网站变慢,那么在没有聊天应用程序中使用的用户会话的情况下,哪种方式效果更好?
    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 2014-12-28
    • 2014-05-02
    • 2013-06-24
    • 1970-01-01
    • 2017-05-03
    • 1970-01-01
    • 2012-05-20
    相关资源
    最近更新 更多