PHPのセッションのタイムアウトと自動ログアウトの仕組み!初心者にもわかる実装方法
生徒
「PHPでログイン機能を作ったんですが、しばらく放置してもログインしたままになっています。勝手にログアウトさせるにはどうすればいいですか?」
先生
「それは“セッションのタイムアウト”や“自動ログアウト機能”を使うことで実現できますよ。一定時間操作がないと自動でログアウトする仕組みです。」
生徒
「どうやって作るんですか?初心者でもできますか?」
先生
「大丈夫、ステップごとにやさしく説明しますね!」
1. セッションのタイムアウトとは?
セッションのタイムアウトとは、「一定時間なにも操作がなければ、自動的にログイン状態を解除する」という仕組みです。これはセキュリティのために非常に大切な機能です。
たとえば、図書館のパソコンで誰かがログインしたまま放置してしまうと、他の人に見られてしまいますよね。それを防ぐのがタイムアウト機能です。
2. PHPでタイムアウトを実装する基本的な考え方
PHPのセッションタイムアウト機能は、自動では設定されていないため、自分で「最後にアクセスした時間」を保存し、それをチェックする必要があります。
具体的には、以下の手順で実現します:
- ① セッション開始時に現在の時刻を記録する
- ② ページにアクセスするたびにその時刻と現在の時刻を比較する
- ③ 一定時間を過ぎていたらログアウトさせる
3. タイムアウトを実装するPHPコードのサンプル
ここでは、5分(300秒)で自動ログアウトする例を紹介します。下記のようにauth.phpなど共通で読み込むファイルに書くと便利です。
<?php
session_start();
$timeout_limit = 300; // 秒(5分)
if (isset($_SESSION['last_access'])) {
$elapsed_time = time() - $_SESSION['last_access'];
if ($elapsed_time > $timeout_limit) {
session_unset();
session_destroy();
header('Location: timeout.php');
exit;
}
}
$_SESSION['last_access'] = time();
?>
time()は現在の時刻(秒)を取得する関数です。セッションに保存した時間との差を計算し、制限を超えていればログアウト処理を行います。
4. ログアウト後に表示するページも用意しよう
セッションがタイムアウトしてログアウトされた場合には、専用のページ(たとえばtimeout.php)を作って、「時間切れでログアウトしました」と表示するようにしましょう。
<h2>セッションタイムアウト</h2>
<p>一定時間操作がなかったため、自動的にログアウトしました。</p>
<a href="loginform.html">ログイン画面に戻る</a>
こうすることで、ユーザーにも状況がわかりやすくなります。
5. セッションの有効期限をサーバー設定でも制御可能
PHPではプログラム内でタイムアウトを制御できますが、サーバー全体の設定でもセッションの期限を設定できます。
php.iniという設定ファイルの中で、以下のように設定します:
session.gc_maxlifetime = 300
この設定は、「セッションが最大で何秒間有効か」を示します。ただし、これはサーバー全体に影響するため、初心者はプログラム側で制御する方法から始めるのが安心です。
6. 自動ログアウト機能を入れるメリットとは?
セッションの自動ログアウト機能を入れることには、大きく3つのメリットがあります:
- ① セキュリティ向上:放置されたログイン状態からの情報漏えいを防げる
- ② サーバー資源の節約:無駄なセッションを自動で整理できる
- ③ ユーザーの安心感:勝手にログアウトされることで逆に安心する人も多い
実際のWebサービスでも多くがこの機能を取り入れています。
7. 忘れずに組み込もう!毎ページに共通のチェックを
ログイン後のすべてのページでタイムアウトチェックを行うためには、auth.phpのような共通ファイルを作成し、次のように各ページの先頭で読み込みます:
<?php require_once 'auth.php'; ?>
これで、どのページでも自動ログアウト機能が働くようになります。