我在settings.py中将SESSION_EXPIRE_AT_BROWSER_CLOSE设置为True并尝试获取该值,但它先返回True,然后再返回False。
在settings.py中
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
在views.py
中def login(request, *args, **kwargs):
if request.method == 'POST':
print 'First call: is expired at the browser close', request.session.get_expire_at_browser_close()
if not request.POST.has_key('remember_me'):
request.session.set_expiry(settings.LOGIN_SESSION_TIMEOUT)
settings.SESSION_EXPIRE_AT_BROWSER_CLOSE = True # just to makie sure
print 'Second call: is expired at the browser close', request.session.get_expire_at_browser_close()
return auth_views.login(request, *args, **kwargs)
第一个调用返回True,但POST内的第二个调用返回False。发生了什么?
答案 0 :(得分:2)
您可以设置到期日期,也可以在浏览器关闭时使会话过期。两者都做不到。
第二次调用get_expire_at_browser_close
会返回False
,因为您已拨打set_expiry
。
答案 1 :(得分:2)
文档实际上很清楚:
来自django/contrib/sessions/backends/base.py
def get_expire_at_browser_close(self):
"""
Returns ``True`` if the session is set to expire when the browser
closes, and ``False`` if there's an expiry date. Use
``get_expiry_date()`` or ``get_expiry_age()`` to find the actual expiry
date/age, if there is one.
"""
if self.get('_session_expiry') is None:
return settings.SESSION_EXPIRE_AT_BROWSER_CLOSE
return self.get('_session_expiry') == 0
SESSION_EXPIRE_AT_BROWSER_CLOSE
是通过不在会话cookie上设置过期日期来实现的,这会导致在浏览器应用程序(而不是浏览器标签!)关闭时删除cookie。