在清除浏览器历史记录后,从数据库支持的Django会话中删除会话数据

2024-10-03 04:26:17 发布

您现在位置:Python中文网/ 问答频道 /正文

在我清除浏览器历史记录之后,会话键和添加到表django_session(会话引擎是由mysql支持的数据库)中的数据仍然存在,对于后续请求,将添加一个新的“session key”。在用户频繁清除历史记录的情况下,此表将在不经意间增长。使用clearsessions命令不会删除行,因为尚未达到到期日期。如果有效期很长,我如何克服这个问题?有没有设置错误?在


Tags: 数据djangokey用户引擎命令数据库历史记录
1条回答
网友
1楼 · 发布于 2024-10-03 04:26:17

实际上,有一种方法是非常低效的,因为它需要迭代所有现有会话。您可以使用信号来捕获会话模型的post_save,然后删除此用户的所有现有会话(新会话除外)(我不确定这是否是您想要的,因为它将删除所有会话,而不仅仅是清除的会话)。在

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()

相关问题 更多 >