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’) | セッションファイルの有効期限を設定 | サーバー側 | やや不確実 |
タイムスタンプ管理 | 有効期限をセッション内で管理 | 両方 | 非常に高い |
セッションの用途やセキュリティ要件に応じて、適切な方法を選びましょう。