在Django中编辑另一个用户的会话

aem*_*mdy 1 django session

我怎样才能做到这一点

request.session['key'] = 'value'
Run Code Online (Sandbox Code Playgroud)

对于user_id为47的用户?

请记住,我目前没有使用该用户登录,我想在shell中执行此操作.

Chr*_*att 9

请参阅标题为"在视图外使用会话"的会话文档部分.

但问题是Django不会将用户存储在会话中(出于安全考虑,设计).因此,检索会话的唯一方法是通过它的关键.该密钥与用户的客户端一起存储,并传递给服务器以将会话与登录用户相关联.换句话说,您将很难确定哪个会话属于哪个用户.

更重要的是,会话数据实际上也在数据库中加密,因此甚至没有任何方法可以直接查询存储在其中的用户ID.以下内容可行,但您必须逐个查询每个会话才能获得正确的用户.根据您的数据库当前有多少会话,这可能非常昂贵.标记为自行承担使用风险

from django.contrib.sessions.models import Session
from django.contrib.sessions.backends.db import SessionStore

for session in Session.objects.all():
    data = SessionStore().decode(session.session_data)
    if data.get('_auth_user_id') == user_id_you_want:
        user_session = SessionStore(session_key=session.session_key)
        # you can modify the session data here like normal, then:
        user_session.save()
Run Code Online (Sandbox Code Playgroud)