会话数据库表清理

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; 也可以工作。 我会在删除之前预先检查会话:在 mysqlselect*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

【讨论】:

以上是关于会话数据库表清理的主要内容,如果未能解决你的问题,请参考以下文章

Oracle ORA-08104报错处理方法及注意事项

mysql 临时空间不足怎么办

oracle中如何对system表空间进行清理?

Audit--清理Audit数据

oracle 临时表

[Oracle]Audit--清理Audit数据