我有这个功能,检查用户是否有活动会话,我从其他视图调用它:
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