「PHPの基礎 - セッション」の版間の差分

ナビゲーションに移動 検索に移動
 
671行目: 671行目:
   * セッションのセキュリティ設定
   * セッションのセキュリティ設定
   *  
   *  
  * 以下に示す設定は、本番環境では可能な限りphp.iniで設定することが推奨される
  *
  * 一部の設定はサーバーの設定によって変更が制限されている場合がある (php.ini_all等)
  * セッション開始後に変更しても効果がない設定がある
  * 実行時の設定変更 (ini_set関数) は、サーバ設定で無効化されている可能性がある
  *
   * session.cookie_httponly: JavaScriptからのクッキーアクセスを防止し、XSS攻撃によるセッションID漏洩を防ぐ
   * session.cookie_httponly: JavaScriptからのクッキーアクセスを防止し、XSS攻撃によるセッションID漏洩を防ぐ
   * session.cookie_secure: HTTPS接続時のみクッキーを送信し、通信経路上での盗聴を防ぐ
   * session.cookie_secure: HTTPS接続時のみクッキーを送信し、通信経路上での盗聴を防ぐ
682行目: 688行目:
  /**
  /**
   * セッション管理クラス
   * セッション管理クラス
   * ユーザーの認証状態とセッションのライフサイクルを管理する
   * ユーザの認証状態とセッションのライフサイクルを管理する
   */
   */
  class SessionManager
  class SessionManager
689行目: 695行目:
     * コンストラクタ:セッションの初期化と設定
     * コンストラクタ:セッションの初期化と設定
     *  
     *  
     * cookie_lifetime: セッションクッキーの有効期限(ブラウザ終了後も持続)
     * cookie_lifetime: セッションクッキーの有効期限 (ブラウザ終了後も持続)
     * gc_maxlifetime: セッションデータの有効期限(サーバー側)
     * gc_maxlifetime: セッションデータの有効期限 (サーバ側)
     * cookie_secure: HTTPSでの通信を強制
     * cookie_secure: HTTPSでの通信を強制
     * cookie_httponly: JavaScriptからのアクセスを禁止
     * cookie_httponly: JavaScriptからのアクセスを禁止
699行目: 705行目:
           session_start([
           session_start([
             'cookie_lifetime' => 3600,  // 1時間でセッション切れ
             'cookie_lifetime' => 3600,  // 1時間でセッション切れ
             'gc_maxlifetime'  => 3600,  // サーバー側でも1時間で破棄
             'gc_maxlifetime'  => 3600,  // サーバ側でも1時間で破棄
             'cookie_secure'  => true,
             'cookie_secure'  => true,
             'cookie_httponly' => true
             'cookie_httponly' => true
709行目: 715行目:
     * ユーザログイン処理
     * ユーザログイン処理
     *  
     *  
     * @param string $userId ユーザーID
     * @param string $userId ユーザID
     * @param array $userData ユーザー情報の配列
     * @param array $userData ユーザ情報の配列
     *  
     *  
     * セキュリティ対策:
     * セキュリティ対策:
841行目: 847行目:
  {
  {
     /**
     /**
     * ユーザー設定をクッキーに保存
     * ユーザ設定をクッキーに保存
     *  
     *  
     * @param string $key 設定キー
     * @param string $key 設定キー
892行目: 898行目:
  if ($authenticated) {  // 認証処理は別途実装必要
  if ($authenticated) {  // 認証処理は別途実装必要
     $sessionManager->login($userId, [
     $sessionManager->login($userId, [
       'name' => 'テストユーザー',
       'name' => 'テストユーザ',
       'email' => 'test@example.com'
       'email' => 'test@example.com'
     ]);
     ]);

案内メニュー