from django.contrib.sessions.models import Session
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=Session)
def save_session(sender, instance, **kwargs):
user_id = instance.get_decoded().get('_auth_user_id')
# Get all sessions excluding current session
sessions = Session.objects.exclude(session_key=instance.session_key)
# Iterate over all sessions and decode them
for session in sessions:
session_user_id = session.get_decoded().get('_auth_user_id')
# If the session belongs to user, delete it
if session_user_id == user_id:
session.delete()
实际上,有一种方法是非常低效的,因为它需要迭代所有现有会话。您可以使用信号来捕获会话模型的post_save,然后删除此用户的所有现有会话(新会话除外)(我不确定这是否是您想要的,因为它将删除所有会话,而不仅仅是清除的会话)。在
相关问题 更多 >
编程相关推荐