Mik*_*ael 9 django django-sessions
当用户登录时,一些细节会保存到会话中,让我们说使用key ='user_settings'
当系统内发生某些更新时,我需要遍历所有用户并从每个用户会话中删除"user_settings"键.这样我就会触发从数据库中加载新鲜的细节.
如何遍历所有会话并从每个会话中删除密钥?
e4c*_*4c5 12
即使您的站点只有几千个用户,您可能会发现django_sessions表中有几百万个条目.如果会话尚未清理,则会发生这种情况.如果您遍历它们并删除会话条目,您会发现该过程非常慢.即使是100个会话也会导致执行100个查询.
您可以django.contrib.sessions.models.Session像在任何其他模型上一样应用过滤器.因此,以下查询将一次性清除所有会话.
from django.contrib.sessions.models import Session
Session.objects.all().delete()
Run Code Online (Sandbox Code Playgroud)
你可以选择遗漏一些用户
Session.objects.filter(session_key__in = [ ... ]).delete()
Run Code Online (Sandbox Code Playgroud)
它不涉及数据检索或循环.
您还可以使用./manage.py clearsessions清理过期的会话.未保留的将被保留.
也许禁食是删除所有会话是用SQL查询.检索和删除的速度非常慢,涉及数百万次查询.
对于支持TRUNCATE的数据库
TRUNCATE django_session
Run Code Online (Sandbox Code Playgroud)
对于那些没有
DELETE FROM django_session
Run Code Online (Sandbox Code Playgroud)
最后要记住,会话会不时到期,因此清除整个会话对象而不仅仅是删除特定密钥没有太大的危害
您可以通过SessionStore对象访问和更新会话数据:
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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1596 次 |
| 最近记录: |