Редактирование сеанса другого пользователя в Django - PullRequest
1 голос
/ 18 января 2012

Как я могу сделать это

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

для пользователя с user_id 47?

Имейте в виду, что я не вошел в систему с этим пользователем, я хочу сделатьэто в оболочке.

Ответы [ 2 ]

9 голосов
/ 18 января 2012

См. Раздел документации по сессиям, озаглавленный "Использование сеансов вне представлений" .

Однако проблема в том, что Django не хранит пользователя с сеансом (в целях безопасности). Таким образом, единственный способ получить сеанс через его ключ. Этот ключ хранится в клиенте пользователя и передается на сервер, чтобы связать сеанс с вошедшим в систему пользователем. Другими словами, вам будет сложно определить, какой сеанс принадлежит какому пользователю.

Более того, данные сеанса фактически зашифрованы и в базе данных, поэтому нет даже способа напрямую запросить сохраненный в нем идентификатор пользователя. Следующее будет работать, но вам придется запрашивать каждый сеанс один за другим, чтобы получить нужного пользователя. В зависимости от того, сколько сеансов в вашей базе данных в настоящее время, это может быть очень дорого. Пометить как ИСПОЛЬЗОВАТЬ НА СВОЙ СТРАХ И РИСК

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()
1 голос
/ 18 января 2012

Ответ полностью зависит от хранилища / механизма сессий, которые вы используете .

Таким образом, общий ответ будет таким: где бы ни сохранялся сеанс, измените его там.

Для базы данных: UPDATE django_session SET session_data=[whatever] WHERE session_key=[whatever];

Вам также понадобятся ключ сеанса и ключ AES, хранящиеся в браузере клиента.

В качестве альтернативы, отправьте их контроллерукоторый обновляет сессию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...