【PHP】セッション情報を使ってページ遷移を制御する方法

【PHP】セッション情報を使ってページ遷移を制御する方法 PHP

Webアプリケーションにおいて、セッション($_SESSION)を使ったページ遷移の制御は、ユーザーのログイン状態や一時的な情報の保持に欠かせません。この記事では、PHPのセッションを活用して、特定の条件に応じてページへのアクセスを制限したり、リダイレクトさせる方法をご紹介します。

セッションの基本 開始と設定

セッションを使うためには、最初に session_start() を実行する必要があります。これは各ページの一番上で呼び出す必要があります。

<?php
session_start();

ログインページなどで、セッションに値を保存するには以下のように記述します。

$_SESSION['user_logged_in'] = true;

この情報はログイン後のページでも参照可能で、ログアウト時には破棄することができます。

session_unset();
session_destroy();

ページ遷移の制御 ログイン済みかどうかを確認

たとえば、dashboard.php というページにアクセスする際に、ログイン済みのユーザー以外を login.php にリダイレクトしたい場合は、以下のように記述します。

<?php
session_start();

if (!isset($_SESSION['user_logged_in']) || $_SESSION['user_logged_in'] !== true) {
  header('Location: login.php');
  exit;
}

このように $_SESSION の状態に応じて header() 関数でページを移動させることで、アクセス制御が可能になります。

特定ページの経由チェック

たとえば、step2.php は step1.php を経由しないとアクセスさせたくない、というケースでは、以下のようにセッションフラグを活用します。

// step1.php で
$_SESSION['passed_step1'] = true;

// step2.php で
if (!isset($_SESSION['passed_step1'])) {
  header('Location: step1.php');
  exit;
}

これにより、想定外の直接アクセスを防ぐことができます。

セッションの有効期限やタイムアウト処理

セッション情報は一定時間操作がなければ切れる可能性があるため、ログイン後の最終アクセス時間を記録して、一定時間経過後はログアウトさせる実装も可能です。

$timeout = 1800; // 30分
if (isset($_SESSION['last_activity']) && (time() - $_SESSION['last_activity']) > $timeout) {
  session_unset();
  session_destroy();
  header('Location: login.php');
  exit;
}
$_SESSION['last_activity'] = time();

まとめ

PHPのセッション機能を使えば、ログイン状態や画面遷移の制御、経路チェック、タイムアウト処理など、ユーザー管理を柔軟に実装できます。セッションはサーバー側に保存されるため、クッキーより安全であり、ユーザーの操作に応じた状態保持が可能になります。セキュリティやユーザー体験の向上のためにも、適切なセッション管理を行いましょう。