2017-06-28 33 views
1

私はdjango(1.10)サイトを実行しています。設定では、私はSESSION_COOKIE_AGE = 60*60*24*365を定義しており、作成から1年間はクッキーの有効期限を設定していました。DjangoセッションCookieの有効期限

最近、セッションはセッション終了時に終了しています。簡単に言えば、セッションの有効期限は設定されていないかもしれませんが、以前のように設定でまだ定義されています。

何が問題なのですか。なぜデフォルトの動作に従わないのですか?私は、ローカルサーバ、テストサーバ、およびプロダクションで同じ問題に直面しています。

私は問題の根源が何であるかわからないので、その質問は明確ではないことを理解します。私が望むのは、セッションIDクッキーの有効期限を作成から1年に設定することです。

すべてのポインタが役立ちます。

答えて

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関数で書いているものを正確に見ることができます。すべてがうまく見える場合は、ブラウザ側に問題がある可能性があります。

+0

私はこれを通過しましたが、今のところどうして起こっているのか、まだ混乱しています。また、他のシステムでも同じ動作が起こっているため、これはブラウザの問題ではありません。 – sprksh

+0

デバッガがインストールされていますか? max_age = None expires = None なぜそれが設定されているのか正確に見ることができるはずです。 get_expire_at_browser_close()関数に入り、それがなぜ真を返すのかを確認します。 – kagronick

+0

@ sprkshどうやって問題を解決しましたか? – DhiaTN

関連する問題