会话数据库表清理

49

这个表格是否需要清除,还是Django会自动处理?

5个回答

65

7
如果您使用的是Django 1.5或更低版本,您可以使用python manage.py cleanup。 - Josir
4
我在使用psql时发现 TRUNCATE django_session; 也可以起作用。 - Alper
在删除之前,我会先检查会话:在mysql中使用select*from django_session;或者查看有多少个会话select count (*)from django_session; - Timo
3
@Alper,在截取表格时请小心,这将有效地清除您系统中每个用户的会话,而不仅是已过期的用户,这就是clearsessions所做的。有时这没关系,但我敢打赌,您肯定不想删除每个人的有效会话数据,比如那些5分钟前登录的用户。 - ViaTech
@ViaTech 噢,在这种情况下(为了打包旧网站),这是一个完全可以接受的结果。 - Alper

23
  1. Django 1.6 or Above
    python manage.py clearsessions
    
  2. Django 1.5 or lower
    python manage.py cleanup
    
  3. From Django Shell
    from django.contrib.sessions.models import Session
    Session.objects.all().delete()
    
  4. django-session-cleanup cornJob

第三个删除所有会话行,而clearsessions仅清除过期的会话,不是吗? - harryghgim
这帮助我通过Django模型访问会话表。+1 - Souvik Ray

3

在我的开发服务器上,我更喜欢使用数据库命令而不是 python manage.py clearsessions 命令,因为你可以删除所有会话,而不仅仅是已过期的会话(这里是 MySQL 数据库)。要登录到数据库并执行以下命令:

truncate table django_session;

顺便提一下,session 不是数据库,而是一个表格(django_session)和一个应用程序(django.contrib.sessions)。


3
根据我的测试,清除会话并不会删除所有的会话,我可以确认在 Django 2.2.7 中当前会话仍然保存在数据表中。 - Greg Holst
4
截断操作也会删除活动会话。 - cwhisperer

0

我知道这篇文章有点旧了,但我尝试了这个命令/属性,它对我有效。

在'base.html'文件中,我插入了以下内容: {{ request.session.clear_expired }}

当用户在会话过期后单击模板中的任何链接时,这将清除django_session表中的过期记录。

即便如此,还需要创建一个例行程序来清除超过一天的过期记录。这是在用户关闭带有打开会话的浏览器时清除日志所必需的。

我使用的是Django 3.2.4


0

其他方法:

我正在使用Django 3.2,并推荐使用django-auto-logout包。

它允许控制活动时间和空闲时间的会话。

在模板中,您可以与Javascript一起使用变量。


虽然这个链接可能会回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面更改,则仅限链接的答案可能会变得无效。-【来自评审】 - Simas Joneliunas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接