PHP8でセッションとクッキー
PHP8でのセッション管理の基礎
PHP8ではセッション管理がより高速化され、デフォルト設定が改善されました。セッションはサーバー側で状態を保持し、クライアントにはセッションIDのみを渡す仕組みです。これにより、ユーザーごとに個別の状態を安全に管理できます。
session_startと$_SESSIONの使い方
セッションを開始するには session_start() を呼び出します。呼び出し後に $_SESSION 配列にデータを格納・取得できます。例として、ユーザー名を保存するコードは次のようになります。
session_start();
$_SESSION['user'] = 'alice';
この配列はリクエスト間で共有され、ログイン状態の保持に便利です。
クッキーとsetcookieで有効期限を管理
セッションIDは通常クッキーに保存されますが、 setcookie() を使って有効期限を明示的に設定できます。例えば、セッションを1時間で期限切れにしたい場合は次のようにします。
setcookie('PHPSESSID', session_id(), time() + 3600, '/');
これにより、ブラウザは1時間後に自動的にセッションIDを削除します。
状態維持とログイン機能の実装
ログイン機能では、認証後に $_SESSION['user_id'] を設定し、以降のページでその値を確認してアクセス制御を行います。状態維持はセッションに依存するため、セッションが切れた場合は再ログインが必要です。
セッションの破棄は session_destroy() で行い、ログアウト時にクッキーも削除します。
セッションIDの安全性と有効期限の設定
セッションIDは予測可能であってはならないため、PHP8ではデフォルトでより長いランダム文字列が生成されます。さらに、 session.cookie_httponly と session.cookie_secure を有効にすると、XSSや中間者攻撃から保護されます。
有効期限は session.gc_maxlifetime で設定でき、サーバー側で古いセッションデータを自動的に削除します。クッキー側の有効期限と合わせることで、ユーザー体験とセキュリティのバランスを取ることができます。
コメント
コメントを投稿