【问题标题】:Editing session of another user in Django在 Django 中编辑另一个用户的会话
【发布时间】:2012-02-12 15:31:06
【问题描述】:

我该怎么做

request.session['key'] = 'value'

user_id 为 47 的用户?

请记住,我目前没有使用该用户登录,我想在 shell 中进行。

【问题讨论】:

    标签: django session


    【解决方案1】:

    请参阅会话文档中标题为 "Using sessions out of views" 的部分。

    但问题是 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()
    

    【讨论】:

      【解决方案2】:

      答案完全取决于session storage/engine you're using

      因此,一般的答案是:无论会话存储在哪里,都在那里进行修改。

      对于数据库后端:UPDATE django_session SET session_data=[whatever] WHERE session_key=[whatever];

      您还需要存储在客户端浏览器中的会话密钥和 AES 密钥。

      或者,将它们发送到更新会话的控制器。

      【讨论】:

        猜你喜欢
        • 2021-04-19
        • 2011-07-25
        • 1970-01-01
        • 2018-11-03
        • 1970-01-01
        • 2020-03-12
        • 2013-06-13
        • 2011-01-29
        • 1970-01-01
        相关资源
        最近更新 更多