【发布时间】:2015-01-24 13:57:25
【问题描述】:
我想知道如何在会话超时发生时触发操作。有没有办法设置在会话数据被销毁之前执行的回调函数?我需要一个也适用于未经身份验证的用户的解决方案。
【问题讨论】:
我想知道如何在会话超时发生时触发操作。有没有办法设置在会话数据被销毁之前执行的回调函数?我需要一个也适用于未经身份验证的用户的解决方案。
【问题讨论】:
假设您使用的是默认会话数据库后端,您可以使用 Django 信号来检测何时从数据库中删除会话,方法类似于:
Django - detect session start and end
请注意,在 Django 1.5+ 中,要使用的命令是 clearsessions,而不是清理。
更多细节可以参考clearing the session store的官方文档。
如果 cronjob 配置在您的情况下不可行,您还可以通过执行以下操作清除其中一个视图中的会话存储:
from django.core import management
management.call_command('clearsessions')
【讨论】:
Session 表不感兴趣。如文档中所述,这可以通过 cron 作业来完成。我想要做的是有一个触发器,每当会话s 到达s.expire_date - timezone.now() < 0 的位置时,它就会被激活。遗憾的是,它似乎并没有我想象的那么简单,所以我想我会执行一个 Celery 任务,它每 2 分钟检查一次 Session.objects.filter(expire_data__lt=timezone.now()) 是否返回一些东西,然后处理数据并最终生成一个 clearsessions。
pre_delete 不会被触发。