Django один сеанс на пользователя - PullRequest
0 голосов
/ 29 марта 2011

на основе документов (http://docs.djangoproject.com/en/1.1/topics/http/sessions/) (да - 1.1) Django создает уникальные сеансы для всех пользователей.Зарегистрированный пользователь содержит _auth_user_id.Как я могу добиться такой проверки при входе в систему:

If new_login._auth_user_id in database:
   delete(sessions_containing_same_id_except_new_one)

Основная идея состоит в том, чтобы разрешить только одну сессию на пользователя и удалять старые сессии.сейчас нужно сохранить sessionid во время регистрации и, если sessionid изменился, удалить старую запись перед заменой.Отсутствующая часть банкомата - получить идентификатор сеанса.

ОБНОВЛЕНИЕ: Я получил идентификатор сеанса с request.session.session_key.Проблема заключалась в том, что sessionid создается после входа в систему.Если вы запрашиваете ключ до того, как он был создан - он создает новый вместо предупреждения.

1 Ответ

4 голосов
/ 29 марта 2011

Я создал дополнительное поле для пользователя (userattributes extends user):

class UserAttributes(User):
    last_session_key = models.CharField(blank=True, null=True, max_length=40)

и метод:

def set_session_key(self, key):
    if self.last_session_key and not self.last_session_key == key:
        Session.objects.get(session_key=self.last_session_key).delete()
    self.last_session_key = key
    self.save()  

, и я вызвал его сразу после входа в систему:

auth.login(request, user)
user.userattributes.set_session_key(request.session.session_key)
...