A-A+

清除django数据库中过期的session记录

2015年01月05日 Django 暂无评论 阅读 10,166 views 次

默认使用django session的验证系统,使用时间长了,如果登陆数据库,执行下:select count(*) from django_session;,会发现,有很多过期的记录:

  1. mysql> select count(*) from django_session;
  2. +----------+
  3. count(*) |
  4. +----------+
  5. |      155 |
  6. +----------+
  7. 1 row in set (0.00 sec)

如果select expire_date字段,可以看到这结时间,早已过期,但为什么程序里,已有在退出登陆时,清除了session,数据库里的记录还会有呢,这主要是:

清空 Session 表格

注意,Session 数据有可能堆积在数据库表格 django_session 中,Django 不提供 自动清除它们的功能。它把定期清空 Session 数据的任务留给了您。

要理解这个问题,想像一下用户使用 Session 时会发生什么。当用户登录,Django 向表格 django_session中添加一条记录。每当 Session 数据变化时,Django 会更新这条记录。如果用户手工退出了,Django 会删除它。但是,如果用户 没有 退出,则这条记录永远都不会被删除。

Django 提供了一个能够完成清除功能的样例脚本manage.py cleanup ,它从 Session 表格中删除那些 expire_date 已经过期的记录,但是您的应用程序可能会有其它的需求。

 

当执行了manage.py cleanup后,数据库中django_session就全清空了

 

 

给我留言

Copyright © linux系统运维 保留所有权利.   Theme  Ality 粤ICP备13023035号-1

用户登录

分享到: