コードは/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関数で書いているものを正確に見ることができます。すべてがうまく見える場合は、ブラウザ側に問題がある可能性があります。
私はこれを通過しましたが、今のところどうして起こっているのか、まだ混乱しています。また、他のシステムでも同じ動作が起こっているため、これはブラウザの問題ではありません。 – sprksh
デバッガがインストールされていますか? max_age = None expires = None なぜそれが設定されているのか正確に見ることができるはずです。 get_expire_at_browser_close()関数に入り、それがなぜ真を返すのかを確認します。 – kagronick
@ sprkshどうやって問題を解決しましたか? – DhiaTN