我正在Django开展课程。
默认情况下,django在django_session中存储会话,我发现没有办法清除会话。
虽然clearsession可用于删除行。还建议将其作为cron作业运行。
但这样做意味着要注销所有已登录的用户。 (我不确定)
这是正确的做法吗?
答案 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)
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
在注销时清除会话(基于请求中存在的会话密钥)
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()