Django会话cookie到期日

时间:2017-06-28 16:31:47

标签: django python-3.x cookies session-cookies

我正在运行一个django(1.10)网站。在设置中,我定义了SESSION_COOKIE_AGE = 60*60*24*365,并且它设置了从创建起1年后的Cookie到期时间。

最近,会议将在会议结束时到期。简单地说,虽然它仍然在早期的设置中定义,但是可能没有设置会话到期。

可能是什么问题。为什么不遵循默认行为。我在本地服务器,测试服务器和生产中面临同样的问题。

我理解这个问题并不清楚,因为我不知道问题的根源是什么。我想要的是将sessionid cookie的到期日期设置为创建后的一年。

任何指针都会有所帮助。

1 个答案:

答案 0 :(得分:1)

该代码发生在/django/contrib/sessions/middleware.py。您可以在此代码块中看到正在发生的事情:

if (modified or settings.SESSION_SAVE_EVERY_REQUEST) and not empty:
    if request.session.get_expire_at_browser_close():
        max_age = None
        expires = None
    else:
        max_age = request.session.get_expiry_age()
        expires_time = time.time() + max_age
        expires = cookie_date(expires_time)

    # Save the session data and refresh the client cookie.
    # Skip session save for 500 responses, refs #3881.
    if response.status_code != 500:
        try:
            request.session.save()
        except UpdateError:
            raise SuspiciousOperation(
                "The request's session was deleted before the "
                "request completed. The user may have logged "
                "out in a concurrent request, for example."
            )
        response.set_cookie(
            settings.SESSION_COOKIE_NAME,
            request.session.session_key, max_age=max_age,
            expires=expires, domain=settings.SESSION_COOKIE_DOMAIN,
            path=settings.SESSION_COOKIE_PATH,
            secure=settings.SESSION_COOKIE_SECURE or None,
            httponly=settings.SESSION_COOKIE_HTTPONLY or None,
        )

如果get_expire_at_browser_close()返回true,则无论过期年龄如何,它都会在浏览器关闭时将会话设置为过期。使用调试器或print语句来检查该函数返回true的原因。如果它没有返回true,则可能是浏览器/配置问题。你可以看到Django最后在set_cookie函数中写出了什么。如果一切看起来都不错,那么您的问题可能就在浏览器端。