Django:在django_session表中清除会话

sac*_*ure 5 python django

我正在Django的会议上工作.

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

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

但这样做意味着注销所有登录用户..正确吗?(我不确定)

这是正确的做法吗?

Ros*_*iya 10

  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()
    
    Run Code Online (Sandbox Code Playgroud)
  4. django-session-cleanup cronJob

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

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()
Run Code Online (Sandbox Code Playgroud)


Emi*_*ron 9

Django 文档说明(来自我的重点):

清除会话存储

当用户在您的网站上创建新会话时,会话数据可能会累积在您的会话存储中.如果您正在使用数据库后端,则django_session数据库表将增长.如果您正在使用文件后端,则您的临时目录将包含越来越多的文件.

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

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

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

Abid A的答案中找到此链接.

clearsessions命令

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

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

正如凯文克里斯托弗亨利在评论中提到的那样,以及e4c5标记的问题的其他可能副本.