会话数据库表清理
Posted
技术标签:
【中文标题】会话数据库表清理【英文标题】:Session database table cleanup 【发布时间】:2011-11-09 21:40:19 【问题描述】:这个表需要被清除还是由 Django 自动处理?
【问题讨论】:
【参考方案1】:其他方法:
我正在使用 Django 3.2,我建议使用 django-auto-logout 包。
它允许活动时间和空闲时间会话控制。
在模板中,您可以将变量与 javascript 一起使用。
【讨论】:
虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review【参考方案2】:我知道这篇文章很旧,但我尝试了这个命令/属性,它对我有用。
在“base.html”文件中,我插入了: request.session.clear_expired
当会话过期后用户点击模板中的任何链接时,这会从 django_session 表中清除过期记录。
即便如此,还是有必要创建一个例程来清除超过一天的过期记录。当用户关闭带有打开会话的浏览器时,这是清除日志所必需的。
我使用的是 Django 3.2.4
【讨论】:
【参考方案3】:Django 不提供自动清除功能。但是,有一个方便的命令可以帮助您手动完成:Django docs: Clearing the session store
python manage.py clearsessions
【讨论】:
如果你使用 Django 1.5 或更低版本,你可以使用 python manage.py cleanup 我在我的 psql 中发现TRUNCATE django_session;
也可以工作。
我会在删除之前预先检查会话:在 mysql 中 select*from django_session;
或查看有多少 select count (*)from django_session;
@Alper 小心截断表,这将有效地清除系统中每个用户的会话,而不仅仅是 clearsessions 所做的过期用户.有时这很好,但我敢打赌,您不想擦除每个人的有效会话数据……比如说一个 5 分钟前登录的人。
@ViaTech 哦,在这种情况下(用于打包旧网站),这是一个非常好的结果。【参考方案4】:
在我的development server
上,我更喜欢使用数据库命令而不是python manage.py clearsessions
,因为您删除了所有会话,而不仅仅是过期的会话(这里:MySQL)。要登录到您的数据库并执行以下操作:
truncate table django_session;
顺便说一句,session
不是数据库,而是一个表 (django_session) 和一个应用程序 (django.contrib.sessions
)。
【讨论】:
根据我的测试,clearsessions 删除所有会话是错误的。在 Django 2.2.7 中,我可以确认当前会话保留在表中。 截断也会删除活动会话【参考方案5】:-
Django 1.6 或更高版本
python manage.py clearsessions
Django 1.5 或更低版本
python manage.py cleanup
来自 Django Shell
from django.contrib.sessions.models import Session
Session.objects.all().delete()
django 会话清理
cornJob
【讨论】:
以上是关于会话数据库表清理的主要内容,如果未能解决你的问题,请参考以下文章