Help us understand the problem. What is going on with this article?

djangoのセッション保持期間について調べてみた

疑問点

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のチュートリアルに出てこない内容は難しい
UT_EE
関西在住のアプリケーションエンジニアです。 本職はC#とJavaを書いていますが、pythonで飯を食うために勉強しています。
yowayowa-engineer
弱々エンジニア会とは駆け出しエンジニアやベテランエンジニアまで、弱々から強々まで幅広く集まるコミュニティのエンジニア集団です!!メンバー募集してますので気になる方は、URLよりSlackに参加ください!条件等は特にありません!
https://join.slack.com/t/yowayowa-engineer/shared_invite/zt-do4vhhzm-Yj~6DIMIfvqMvHm0hcXGrA
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away