django会话帖保存两次

时间:2015-12-14 02:51:37

标签: python django python-2.7 session

Django Session新手, 我想阻止多次登录来自同一凭证。

class UserManager(models.Model):
    """
    It hold session_key used for log-in for particular user.
    """

    user = models.OneToOneField(User, db_index=True)
    session = models.OneToOneField(
        Session, null=True, on_delete=models.SET_NULL
    )


def session_post_save(**kwargs):
    session = kwargs['instance']

    uid = session.get_decoded().get('_auth_user_id')

    if uid:
        profile = UserManager.objects.get(user__id=uid)

        # delete old session
        if profile.session:
            profile.session.delete()

        # update session value
        profile.session = session
        profile.save()


post_save.connect(session_post_save, sender=Session,
                  dispatch_uid='session_post_save_add_usermanager')

问题是,我无法弄清楚为什么session_post_save方法被调用两次?或会议的工作?

第一次调用用户login()方法,并且session.get_decoded().get('_auth_user_id')为“无”,然后在某个函数django/contrib/sessions/backends/base.py(279)cycle_key()中将会话删除。不知道为什么?

再次插回来。 第二次在发送响应时调用session_post_save方法,session.get_decoded().get('_auth_user_id')不是None。

由于

1 个答案:

答案 0 :(得分:0)

这是另一个问题,其中包含有关如何实现此目标的IP地址的一些建议

detect multiple logins into a Django web application