当用户登录时,某些详细信息会保存到会话中,让我们说使用key =' user_settings'
当系统内发生某些更新时,我需要遍历所有用户并删除' user_settings'来自每个用户会话的密钥。这样我就会触发从数据库中加载新鲜的细节。
如何遍历所有会话并从每个会话中删除密钥?
答案 0 :(得分:12)
即使您的网站只有几千个用户,您也可能会发现django_sessions表中有几百万个条目。如果会话尚未清理,则会发生这种情况。如果您遍历它们并删除会话条目,您会发现该过程非常慢。即使是100个会话也会导致100个查询被执行。
您可以在django.contrib.sessions.models.Session
上应用过滤器,就像在任何其他模型上一样。因此,以下查询将一次性清除所有会话。
from django.contrib.sessions.models import Session
Session.objects.all().delete()
你可以选择遗漏一些用户
Session.objects.filter(session_key__in = [ ... ]).delete()
它不涉及数据检索或循环。
您还可以使用./manage.py clearsessions
清除过期的会话。未保留的将被保留。
也许禁食是删除所有会话是用SQL查询。检索和删除的速度非常慢,涉及数百万次查询。
对于支持TRUNCATE的数据库
TRUNCATE django_session
对于那些没有
的人DELETE FROM django_session
最后请记住,会话会不时到期,因此清除整个会话对象而不仅仅是删除特定密钥并没有太大的危害
答案 1 :(得分:6)
您可以通过SessionStore object:
访问和更新会话数据from django.contrib.sessions.models import Session, SessionStore
for session in Session.objects.all():
store = SessionStore(session.session_key)
del store['user_settings']
store.save()
答案 2 :(得分:0)
您可以像其他字典一样从会话中删除密钥。
del request.session['your key']
了解更多信息,请查看
How do I delete a session key in Django after it is used once?