このページでは、Django における「自動ログアウト時間」の設定方法について解説していきます!
下記ページでも解説していますが、Django を利用することで簡単にログイン機能を持たせたウェブアプリを開発することが可能です。
【Django】ログイン機能の実現方法(関数ベースビュー編) 【Django】ログイン機能の実現方法(クラスベースビュー編)この Django のログイン機能においては、ログインから一定時間が経過した際に自動的にログアウトされるようになっています。
この自動ログアウトされるまでの時間は、デフォルトでは「ログインから2週間後」に設定されています。
ただ、この自動ログアウトされるまでの時間をもっと短くしたい場合やもっと長くしたいような場合もあると思います。また、自動ログアウトされるまでの時間の計測開始タイミングを「ログインから」ではなく「最終アクセスから」に変更したい場合もあると思います。
このページでは、このような自動ログアウト関連の設定の変更を行う方法について解説していきたいと思います。
Contents
自動ログアウトまでの時間の変更
では、まずは自動ログアウトまでの時間を変更する方法について解説していきます。
SESSION_COOKIE_AGE
で設定変更を行う
今回紹介するような自動ログアウトに関する設定の変更は、settings.py
への追記によって実現することが出来ます。
自動ログアウトまでの時間を変更する際には、settings.py
に SESSION_COOKIE_AGE
の設定の追記を行います。
SESSION_COOKIE_AGE
は自動ログアウトまでの時間を設定する設定項目となります。時間の単位は「秒」で指定を行います。また、デフォルトは 60 * 60 * 24 * 7 * 2
で2週間に設定されています。
例えば settings.py
に下記を追記すれば(追記場所はファイルの最後部分で良いです)、自動ログアウトまでの時間を5分に設定することができます。
SESSION_COOKIE_AGE = 60 * 5
スポンサーリンク
SESSION_COOKIE_AGE
変更の効果確認
続いて、上記の追記による効果の確認を行なっていきましょう。
実際の動作での確認
SESSION_COOKIE_AGE
の設定による効果は、settings.py
への追記後にウェブアプリを起動し、実際にログインを行ってみることで確認することが出来ます。ログイン後、SESSION_COOKIE_AGE
に設定した時間だけ待ってみれば自動的にログアウトが行われるはずです。
これにより、SESSION_COOKIE_AGE
の変更で自動ログアウトされるまでの時間が変化していることを確認できます。
例えば上記のように SESSION_COOKIE_AGE
を変更したのであれば、ログインしてから5分後に自動的にログアウトが行われるはずです。
データベースでの確認
また、自動ログアウトまでの時間はデータベースの django_session
というテーブルに記録されています。ですので、このテーブルを見ることで自動ログアウトまでの時間が変化したことを確認することもできます。
上の図は django_session
テーブルの中身を表示した結果であり、expire_date
の列が自動ログアウトされる日時を示しています(レコードは基本的にはログインユーザーごとに保存される)。
ですので、ログインをした後に django_session
テーブルの expire_date
の列を見てみれば、ログインしてから SESSION_COOKIE_AGE
に設定した時間経過後が自動ログアウトされる日時に設定されていることを確認することが出来ます。
ちなみに、先ほど示したテーブルは VSCode のプラグインである SQLite Viewer
を利用して表示した結果となります。
ウェブアプリではデータベースを利用する機会が多いので、テーブルの中身をお手軽に確認できる環境があると便利です。
このプラグインについては下記ページでも紹介していますので、使い方等の詳細は下記ページを参考にしていただければと思います。
【Django/VSCode】データベースのテーブルの中身を表示する自動ログアウトまでの時間の計測開始タイミングの変更
デフォルトでは、自動ログアウトまでの時間は「ログインしてから」計測されることになります。
この計測開始タイミングは変更することができ、これにより「最終アクセスから」計測されるように変更することが出来ます。
SESSION_SAVE_EVERY_REQUEST
で設定変更を行う
この計測開始タイミングに関しても、settings.py
によって変更することが出来ます。具体的に設定を行うのは SESSION_SAVE_EVERY_REQUEST
となります。
SESSION_SAVE_EVERY_REQUEST
は、django_session
テーブルのレコードをユーザーからのアクセスのたびに更新するかどうかを設定する設定項目になります。
デフォルトでは False
が設定されており、ログイン時のみにレコードが更新(追加)されるようになっています(ちなみに手動ログアウトを行うとレコードが削除されます)。
それに対し、True
を設定することでログイン時のみではなくアクセスが発生するたびにレコードが更新されるようになります。さらに、この更新時には、expire_date
のフィールドもアクセスしたタイミングから SESSION_COOKIE_AGE
経過した時間に更新されることになるため、結果的に自動ログアウトまでの時間の計測タイミングが「最終アクセスから」に変化することになります。
具体的には、settings.py
に下記を追記すれば(追記場所はファイルの最後部分で良いです)、自動ログアウトまでの時間の計測開始タイミングを「最終アクセスから」に設定することができます。
SESSION_SAVE_EVERY_REQUEST = True
スポンサーリンク
SESSION_SAVE_EVERY_REQUEST
変更の効果確認
続いて、上記の追記による効果の確認を行なっていきましょう。
実際の動作での確認
SESSION_SAVE_EVERY_REQUEST
の設定による効果も、settings.py
への追記後にウェブアプリを起動し、実際にログイン&アクセスを行ってみることで確認することが出来ます。
ログイン後にアプリに何度かアクセスしてみれば、ログイン後から SESSION_COOKIE_AGE
に設定した時間経過してもログアウトしなくなっていることが確認できると思います。
また、アクセスせずに待ち続ければ、最終アクセスから SESSION_COOKIE_AGE
に設定した時間経過した際に自動的にログアウトされることが確認できると思います。
データベースでの確認
また、SESSION_SAVE_EVERY_REQUEST
の設定による効果に関しても、django_session
テーブルの expire_date
フィールドを見ることで確認することが出来ます。
SESSION_SAVE_EVERY_REQUEST
を True
に設定した場合、アプリへのアクセスを行うたびにレコードが更新され、expire_date
フィールドの日時が伸びていく様子が確認できると思います。
また、SESSION_SAVE_EVERY_REQUEST
を設定しない or False
に設定した場合、アプリへのアクセスを行なってもレコードは更新されず、expire_date
フィールドの日時もずっと同じであることが確認できると思います。
まとめ
このページでは、Django における「自動ログアウトまでの時間」の変更方法について解説しました!
Django においては settings.py
に SESSION_COOKIE_AGE
の設定を追記することで、自動ログアウトまでの時間を変更することが出来ます。
同様に、settings.py
に SESSION_SAVE_EVERY_REQUEST = True
を追記することで、自動ログアウトまでの時間の計測開始タイミングを「最終アクセスから」に変更することもできます。
ウェブアプリ開発時には自動ログアウトまでの時間を変更したくなることも多いと思いますので、是非このページで解説した内容は頭の片隅にでも置いておいていただければと思います。
また、今回の自動ログアウト関連の設定のように、Django においては settings.py
で様々なアプリの動作(フレームワークの動作)の設定を行うことが可能です。
具体的に settings.py
で設定可能な項目の調べ方は下記ページで解説していますので、どんな設定が可能かを知りたい方は是非読んでみてください!