我正在使用Django
和MongoDB
作为后端数据库。
在settings.py
我已经设置了这些代码:
SESSION_ENGINE = 'mongoengine.django.sessions'
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.sessions',
在我的view/user.py
中(只是部分代码)
if user.password == password:
#add session information
if request.session.test_cookie_worked():
returnmsg = "COOKIE OK"
else:
returnmsg = "COOKIE ERR"
response = HttpResponse(returnmsg)
response.set_cookie("username", username)
request.session['username'] = username
user.log.append(UserLog(time=datetime.now(), ip=request.META['REMOTE_ADDR'], login=True))
user.save()
return response
当我运行我的网站时,我可以通过此功能登录,其他需要验证我的会话设置的功能可以从username
读取response.session
。
但是returnmsg是COOKIE ERR
,当我使用Safari的Web Inspector时,我在这里看不到任何会话或cookie。
Django在哪里存储会话数据?它应该是客户端计算机上的编码cookie吗?如果它没有存储在我客户的计算机上,为什么Django
仍然能够得到它?
在我的代码中,我也尝试过直接设置一个cookie,它仍然不起作用。
MongoEngine
有什么问题吗?我是以错误的方式使用它吗?
答案 0 :(得分:1)
您应首先使用set_test_cookie()
设置测试Cookie,然后在随后的请求中使用test_cookie_worked()
检查它。
该功能不测试cookie是否有效,它会特别检查测试cookie是否成功设置 - 这会导致检查cookie是否有效。
除非您使用set_test_cookie()
,否则test_cookie_worked()
将始终失败。