2016-08-03 41 views
3

我正在Django中进行会话。Django:清除django_session表中的会话

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

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

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

这是正确的做法吗?

+0

的可能的复制[Django的:会话数据库表清理](http://stackoverflow.com/questions/7296159/django-session-database-table-清理) –

+2

不,'clearsessions'只会清除过期的会话。 –

+0

[删除所有用户的会话密钥]可能重复(http://stackoverflow.com/questions/30864711/delete-session-key-from-all-users) – e4c5

回答

4

Django的documentation国家(重点从我):

清除会话存储

随着用户创建自己的网站新的会话,会话数据可以 累积在你的会话存储。如果您使用的是后端数据库 ,那么django_session数据库表将会增长。如果您使用 文件后端,您的临时目录将包含增加的文件数 。

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

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

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

找到链接Abid A's answer

clearsessions命令

可以运行一个cron作业或直接清理过期会话。

因此它不会注销每个用户。

正如凯文克里斯托弗亨利在comment和其他possible duplicate您的问题flagged by e4c5所述。

+0

这是好的!..但这样做会注销所有登录用户..好吗? – sachsure

+0

您可以手动删除比'x'时间早的所有行。 –

+0

@sachsure我用文档中的更多信息更新了答案。 –

0
  1. Django的1.6以上

    python manage.py clearsessions

  2. Django的1.5或更低

    python manage.py cleanup

  3. 从Django的壳牌

    from django.contrib.sessions.models import Session Django的会话清除在注销 cornJob

  4. 结算会议(基于会话密钥存在于请求)

    Session.objects.all().delete()

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()