Django每个用户一个会话

0 投票
1 回答
5512 浏览
提问于 2025-04-16 14:38

根据文档(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)

主要的想法是每个用户只允许一个会话,并且删除旧的会话。

更新:现在的想法是在登录时保存会话ID,如果会话ID发生变化,就在替换之前删除旧的记录。目前缺少的部分是如何获取这个会话ID。

更新:我通过 request.session.session_key 获取到了会话ID。问题在于会话ID是在登录后才创建的。如果你在它被创建之前请求这个ID,它会创建一个新的,而不是给你任何警告。

1 个回答

4

我为用户创建了一个额外的字段(userattributes 继承自 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)

撰写回答