Django:在django_session表中清除会话

时间:2016-08-03 20:37:55

标签: python django

我正在Django开展课程。

默认情况下,django在django_session中存储会话,我发现没有办法清除会话。

虽然clearsession可用于删除行。还建议将其作为cron作业运行。

但这样做意味着要注销所有已登录的用户。 (我不确定)

这是正确的做法吗?

3 个答案:

答案 0 :(得分:8)

Django documentation州(强调我):

  

清除会话商店

     

当用户在您的网站上创建新会话时,会话数据可以   积累在你的会话商店。如果您正在使用数据库   后端,django_session数据库表将增长。如果你正在使用   文件后端,您的临时目录将包含增加   文件数量。

     

要了解此问题,请考虑数据库会发生什么   后端。当用户登录时,Django会向django_session添加一行   数据库表。每次会话数据时,Django都会更新此行   变化。如果用户手动注销,Django将删除该行。但如果   用户没有注销,该行永远不会被删除。一个相似的   进程发生在文件后端。

     

Django不提供自动清除过期的会话。   因此,定期清除过期会话是你的工作。   Django为此提供了一个清理管理命令:   clearsessions。建议定期调用此命令   基础,例如每日cron工作

     

请注意,缓存后端不容易受到此问题的影响,因为   缓存自动删除陈旧数据。饼干后端也不是,   因为会话数据是由用户的浏览器存储的。

Abid A's answer中找到此链接。

clearsessions命令

  

可以作为cron作业运行,也可以直接清除过期的会话。

所以它不会注销每个用户。

正如凯文·克里斯托弗·亨利在问题的comment和另一个possible duplicate中提到的那样flagged by e4c5

答案 1 :(得分:3)

  1. Django 1.6或以上

    python manage.py clearsessions

  2. Django 1.5或更低

    python manage.py cleanup

  3. 来自Django Shell

    from django.contrib.sessions.models import Session

    Session.objects.all().delete()

  4. Django的会话清理 cornJob

  5. 在注销时清除会话(基于请求中存在的会话密钥)

  6. from django.contrib.sessions.models import Session

    session_key = request.data['sessionKey']

    session = Session.objects.get(session_key=session_key)

    Session.objects.filter(session_key=session).delete()

    Session.objects.all().delete()

答案 2 :(得分:0)

Django的较新版本允许:request.session.clear()