Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 您能否使特定用户无效';取消激活上的会话?_Python_Django_Session_Logout_Invalidation - Fatal编程技术网

Python 您能否使特定用户无效';取消激活上的会话?

Python 您能否使特定用户无效';取消激活上的会话?,python,django,session,logout,invalidation,Python,Django,Session,Logout,Invalidation,我在Django用户模型的代理类上定义了一个deactivate方法,以阻止他们登录(例如,如果他们已过期),但是如果他们仍然登录,我希望使他们的所有会话无效 有没有德扬戈认可的或蟒蛇式的方法来做到这一点 由于会话是经过编码的,所以最好不要遍历会话并对每个会话进行解码,以找到与此用户关联的会话。我已经研究了Django支持的在密码更改时使会话无效的方法,但是在我的例子中,用户并没有更改他们自己的密码,而是强制他们注销。以下是我的CustomUser模型: class CustomUser(Use

我在Django用户模型的代理类上定义了一个deactivate方法,以阻止他们登录(例如,如果他们已过期),但是如果他们仍然登录,我希望使他们的所有会话无效

有没有德扬戈认可的或蟒蛇式的方法来做到这一点

由于会话是经过编码的,所以最好不要遍历会话并对每个会话进行解码,以找到与此用户关联的会话。我已经研究了Django支持的在密码更改时使会话无效的方法,但是在我的例子中,用户并没有更改他们自己的密码,而是强制他们注销。以下是我的CustomUser模型:

class CustomUser(User):
        class Meta:
            proxy = True

        def deactivate(self):
            if self.is_active:
                self.is_active = False
                self.save()

        def activate(self):
            if not self.is_active:
                self.is_active = True
                self.save()

最终在会话_数据上使用了Session.objects.distinct(),从而将集合从130万个唯一会话_数据哈希减少到大约7000个。技巧不错,但真希望Django对此有一个规定的解决方案。

既然您在别处处理其余的功能,为什么不使用Django.contrib.auth.logout()。logout()使用session.flush(),它工作得很好,因为它会传入该用户的请求对象,从而传递会话密钥。我的情况不同,因为我试图刷新不同用户的所有会话,我不知道其密钥。