疑問点
djangoアプリの作成中にrunserverでアプリの再起動した場合、
画面をリロードしたり、URLを直接叩いてもログインしたままの状態となっていた。
views.pyで定義した@login_required
を疑ったが問題なかった。
そもそもログインセッションをどのタイミングで更新しているのか、
どれぐらいの期間で保持しているのか、ログインセッションについて調べたことを忘備録として作成する。
djangoのセッションについては主に↓を参照した
セッション情報の入出力
セッション情報はdjango_sessinoテーブルにセッション情報データを管理しており、
ログイン時はセッションデータをinsertし、ログアウト時はセッションデータをdeleteしている。
つまり、django_sessinoテーブルにセッション情報データが登録されている間が認証中となる。
上記はデータベースを使ったセッションの管理方法であり、
ファイルやクッキーを使ったセッションの管理方法は対象外とする。
セッションの永続化
ブラウザの終了でセッションを破棄するかはパラメータSESSION_EXPIRE_AT_BROWSER_CLOSE
で制御しており、デフォルト値はFalse。
ブラウザ終了時のセッションを
- True -破棄する
- False-破棄しない
SESSION_EXPIRE_AT_BROWSER_CLOSE
がFalseの場合、セッション情報は利用者のクッキーで保管される。
保存期間はSESSION_COOKIE_AGE
パラメータで制御され、デフォルト値は1209600(2週間の秒表記)。
まとめ
- 画面を開いている間でログインセッションを有効にする場合は
SESSION_EXPIRE_AT_BROWSER_CLOSE
をTrueにする - 一定期間でセッションタイムアウトを行うには、
SESSION_EXPIRE_AT_BROWSER_CLOSE
をFalseに、SESSION_COOKIE_AGE
に期間を指定する。 - djangoのチュートリアルに出てこない内容は難しい