【Django】自動ログアウト時間の設定方法

Djangoにおける自動ログアウトまでの時間の変更方法解説ページアイキャッチ

このページでは、Django における「自動ログアウト時間」の設定方法について解説していきます!

下記ページでも解説していますが、Django を利用することで簡単にログイン機能を持たせたウェブアプリを開発することが可能です。

Djangoでのログイン機能の実現方法解説ページアイキャッチ【Django】ログイン機能の実現方法(関数ベースビュー編) Djangoでクラスベースビューでログインを実現する方法の解説ページアイキャッチ【Django】ログイン機能の実現方法(クラスベースビュー編)

この Django のログイン機能においては、ログインから一定時間が経過した際に自動的にログアウトされるようになっています。

この自動ログアウトされるまでの時間は、デフォルトでは「ログインから2週間後」に設定されています。

ただ、この自動ログアウトされるまでの時間をもっと短くしたい場合やもっと長くしたいような場合もあると思います。また、自動ログアウトされるまでの時間の計測開始タイミングを「ログインから」ではなく「最終アクセスから」に変更したい場合もあると思います。

このページでは、このような自動ログアウト関連の設定の変更を行う方法について解説していきたいと思います。

自動ログアウトまでの時間の変更

では、まずは自動ログアウトまでの時間を変更する方法について解説していきます。

SESSION_COOKIE_AGE で設定変更を行う

今回紹介するような自動ログアウトに関する設定の変更は、settings.py への追記によって実現することが出来ます。

自動ログアウトまでの時間を変更する際には、settings.pySESSION_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テーブルの中身

上の図は django_session テーブルの中身を表示した結果であり、expire_date の列が自動ログアウトされる日時を示しています(レコードは基本的にはログインユーザーごとに保存される)。

ですので、ログインをした後に django_session テーブルの expire_date の列を見てみれば、ログインしてから SESSION_COOKIE_AGE に設定した時間経過後が自動ログアウトされる日時に設定されていることを確認することが出来ます。

SESSION_COOKIE_AGEの設定によってexpire_dateに記録される日時が変化する様子

ちなみに、先ほど示したテーブルは VSCode のプラグインである SQLite Viewer を利用して表示した結果となります。

ウェブアプリではデータベースを利用する機会が多いので、テーブルの中身をお手軽に確認できる環境があると便利です。

このプラグインについては下記ページでも紹介していますので、使い方等の詳細は下記ページを参考にしていただければと思います。

VSCodeでデータベースのテーブルの中身を表示する方法の解説ページアイキャッチ【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_REQUESTTrue に設定した場合、アプリへのアクセスを行うたびにレコードが更新され、expire_date フィールドの日時が伸びていく様子が確認できると思います。

また、SESSION_SAVE_EVERY_REQUEST を設定しない or Falseに設定した場合、アプリへのアクセスを行なってもレコードは更新されず、expire_date フィールドの日時もずっと同じであることが確認できると思います。

SESSION_SAVE_EVERY_REQUESTの設定によってアクセス時のexpire_dateの更新の有無が変化する様子

まとめ

このページでは、Django における「自動ログアウトまでの時間」の変更方法について解説しました!

Django においては settings.pySESSION_COOKIE_AGE の設定を追記することで、自動ログアウトまでの時間を変更することが出来ます。

同様に、settings.pySESSION_SAVE_EVERY_REQUEST = True を追記することで、自動ログアウトまでの時間の計測開始タイミングを「最終アクセスから」に変更することもできます。

ウェブアプリ開発時には自動ログアウトまでの時間を変更したくなることも多いと思いますので、是非このページで解説した内容は頭の片隅にでも置いておいていただければと思います。

また、今回の自動ログアウト関連の設定のように、Django においては settings.py で様々なアプリの動作(フレームワークの動作)の設定を行うことが可能です。

具体的に settings.py で設定可能な項目の調べ方は下記ページで解説していますので、どんな設定が可能かを知りたい方は是非読んでみてください!

Djangoのsettings.pyで設定可能な項目とデフォルト値の調べ方の解説ページアイキャッチ【Django】settings.py での設定可能項目やデフォルト値の調べ方

同じカテゴリのページ一覧を表示

コメントを残す

メールアドレスが公開されることはありません。