修改不同Django用户的session数据
Modify session data of different Django user
这可能是不可能的,但是当某些情况发生时,我想修改某些登录用户的会话数据(标记一些额外的逻辑需要 运行 他们下次加载页)。
有没有办法通过 ID 访问用户的会话?
tldr;查询Session
模型,然后通过SessionStore
.
修改匹配会话
你的问题是双重的,如何获取用户的会话,以及如何修改任意会话的数据(可能在视图之外)。
获取所有登录的用户会话
由于会话数据以编码形式存储,我建议获取所有未过期的会话,迭代它们,解码数据并检查是否与用户相关联。收集匹配的会话密钥以供以后使用。
from datetime import datetime
>>> sessions = Session.objects.exclude(expire_date__lte=datetime.now())
# [<Session: Session object>, <Session: Session object>]
>>> logged_in = [s.session_key for s in sessions if s.get_decoded().get('_auth_user_id')]
# [u'qu1ir36jjvgbq2koqfa37b9hw1kb3ssu']
在视图之外修改会话
虽然场景没有明确说明,the docs do mention 如何在没有 request
上下文的情况下访问会话。基本上,必须使用 SessionStore
来修改会话(这又会将新数据存储在 Session
中)
from django.contrib.sessions.backends.db import SessionStore
# look up our sessions in session store
for session_key in logged_in:
s = SessionStore(session_key=session_key)
s['test'] = True
s.save()
s.modified
# True
这可能是不可能的,但是当某些情况发生时,我想修改某些登录用户的会话数据(标记一些额外的逻辑需要 运行 他们下次加载页)。
有没有办法通过 ID 访问用户的会话?
tldr;查询Session
模型,然后通过SessionStore
.
你的问题是双重的,如何获取用户的会话,以及如何修改任意会话的数据(可能在视图之外)。
获取所有登录的用户会话
由于会话数据以编码形式存储,我建议获取所有未过期的会话,迭代它们,解码数据并检查是否与用户相关联。收集匹配的会话密钥以供以后使用。
from datetime import datetime
>>> sessions = Session.objects.exclude(expire_date__lte=datetime.now())
# [<Session: Session object>, <Session: Session object>]
>>> logged_in = [s.session_key for s in sessions if s.get_decoded().get('_auth_user_id')]
# [u'qu1ir36jjvgbq2koqfa37b9hw1kb3ssu']
在视图之外修改会话
虽然场景没有明确说明,the docs do mention 如何在没有 request
上下文的情况下访问会话。基本上,必须使用 SessionStore
来修改会话(这又会将新数据存储在 Session
中)
from django.contrib.sessions.backends.db import SessionStore
# look up our sessions in session store
for session_key in logged_in:
s = SessionStore(session_key=session_key)
s['test'] = True
s.save()
s.modified
# True