【PHP】セッションに期限を設定する方法

【PHP】セッションに期限を設定する方法 PHP

PHPでログイン状態などを維持する際に便利なセッションですが、デフォルトではブラウザを閉じるまで有効となっており、セキュリティ上の理由から有効期限を明示的に設定したいケースがよくあります。

この記事では、PHPでセッションに期限を設定する主な方法を3つ紹介します。

セッションクッキーの有効期限を設定する(クライアント側)

セッションは通常、クッキーに保存されます。

PHPでは、セッション開始前にsession_set_cookie_params()関数を使って、クッキーの有効期限を指定することができます。

// セッション開始前に設定
$lifetime = 3600; // 1時間(3600秒)
session_set_cookie_params([
    'lifetime' => $lifetime,
    'path' => '/',
    'secure' => isset($_SERVER['HTTPS']),
    'httponly' => true,
    'samesite' => 'Lax'
]);

session_start();

この設定により、1時間経過後にクッキーが自動的に削除されるため、セッションも無効になります。

ガーベジコレクションで有効期限を設定する(サーバー側)

PHPは、セッションデータをサーバー上にファイルとして保存します。
このセッションファイルを削除するための仕組みがガーベジコレクション(GC)です。

以下のようにして、有効期限を設定できます。

ini_set('session.gc_maxlifetime', 3600); // 1時間
session_start();

ただし、この設定は「1時間経過後にすぐに削除される」という意味ではなく、「GCが実行されたときに、最終アクセスから1時間以上経過しているセッションは削除される」という目安の時間になります。

自前でセッションの有効期限を管理する(おすすめ)

確実にセッションの有効期限を制御したい場合は、セッションに有効期限のタイムスタンプを保存して、自前でチェックする方法が最も信頼できます。

session_start();

// 初回アクセス時に有効期限を設定
if (!isset($_SESSION['expire_time'])) {
    $_SESSION['expire_time'] = time() + 3600; // 1時間
}

// 有効期限チェック
if (time() > $_SESSION['expire_time']) {
    session_unset();      // セッション変数をクリア
    session_destroy();    // セッションを破棄
    header("Location: login.php"); // ログインページなどへリダイレクト
    exit;
}

この方法を使えば、セッションの有効期限を厳密に管理できるため、ログイン制限や一時的な状態保持などにも適しています。

まとめ

方法 内容 タイミング 信頼性
session_set_cookie_params クッキーの有効期限を設定 クライアント側 高い
ini_set(‘session.gc_maxlifetime’) セッションファイルの有効期限を設定 サーバー側 やや不確実
タイムスタンプ管理 有効期限をセッション内で管理 両方 非常に高い

セッションの用途やセキュリティ要件に応じて、適切な方法を選びましょう。