修改不同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