根据Django文档,“如果SESSION_EXPIRE_AT_BROWSER_CLOSE设置为True,Django将使用浏览器长度的cookie - 一旦用户关闭浏览器就会过期的cookie . 如果您希望人们每次都必须登录,请使用此打开浏览器 . “
这就是我通过将以下行添加到我的settings.py文件(并重新启动服务器)所做的事情:
# Close the session when user closes the browser
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
然后我登录到一个页面,检查用户是否经过身份验证,然后我关闭了浏览器 . 当我再次打开浏览器并访问同一页面时,它不会要求输入用户名和密码,因为它显然通过了以下测试:
def check_teacher(request):
result = {}
if request.user.is_authenticated():
...
我做错了什么或我错过了什么?有什么建议?
我在我的Ubuntu GNU / Linux 10.10系统上使用Django 1.3版pre-alpha SVN-13858,并使用Django开发服务器运行上面的示例 .
4 回答
关闭选项卡或窗口不算作关闭浏览器 . 确保退出浏览器程序以结束浏览器会话 .
如果这没有用,请在Firefox中使用FireBug或在Safari中使用Web Inspector在初始页面命中时仔细检查响应中的 Headers . 初始页面命中可以是许多事情之一;当您第一次打开浏览器,注销时或清除cookie后立即 . 使用
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
,您应该在 Headers 中看到类似的内容:当
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
将添加expires=...
值时:如果由于重定向而很难看到
Set-Cookie
Headers ,您可以尝试使用django-debug-toolbar将重定向分解为多个页面 .@istruble和@haasfsafas都是正确的 . 解决方案是
设置
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
删除
django_session
表中的行以清除可能导致混淆的任何会话 . (delete from django_session
)确认必须关闭浏览器中的 all of the windows and tabs 才能使会话过期 . 这是浏览器的行为;不是Django的行为 .
除非再次运行
manage.py syncdb
,否则更改将不适用 .您必须清理DB中的会话: