基于docs(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更改,则在替换之前删除旧条目。 ATM丢失部分是获取该会话ID。
更新:我使用request.session.session_key
获得了sessionid。问题是在登录后创建了 sessionid。如果您在创建密钥之前请求密钥 - 它会创建新密钥而不是发出任何警告。
答案 0 :(得分:4)
我为用户创建了额外字段(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)