当用户拥有会话cookie时,Django会创建不需要的会话

时间:2014-06-07 18:51:31

标签: python django session

我有这个功能,检查用户是否有活动会话,我从其他视图调用它:

def checkSession(request):
    try:
        with transaction.atomic():
            a = request.session['userID']
    except KeyError:
        return False
    return True  # session is active

如果用户没有新会话,我想避免在我的数据库中创建新会话。这就是我使用transaction.atomic()的原因。 在大多数情况下,这实际上是有效的。但是,如果用户带有数据库中不存在的会话cookie(例如,我从数据库中删除了它)。然后这个代码确实会按预期返回False,但仍然会为他创建一个新的会话密钥,给他一个新的cookie而不是他以前的那个,并在数据库中创建一行 - 我想要的所有这些如果用户没有会话数据则避免。 只有当用户带有会话cookie并且代码正常流动时才会发生这种情况 - 即在调用checkSession函数的视图中没有内部服务器错误。

为什么会发生这种情况? 如果用户带有一个会话cookie到服务器,或者没有一个会话cookie,如果在这两种情况下数据库中没有他的会话数据,为什么会有差异呢?

我用户django 1.6.1

0 个答案:

没有答案