assert($params['httponly'] === true, 'HttpOnly-Flag ist gesetzt'); $this->assertEquals('Lax', $params['samesite'], 'SameSite steht auf Lax'); $this->assert($params['secure'] === false, 'Secure ist bei Plain-HTTP ohne Override deaktiviert'); // Erzwungenes Secure per Env, unabhängig vom Request putenv('SESSION_COOKIE_SECURE=1'); $params = Auth::cookieParams(); $this->assert($params['secure'] === true, 'SESSION_COOKIE_SECURE=1 erzwingt Secure-Flag'); // Override hat Vorrang vor erkanntem HTTPS-Request putenv('SESSION_COOKIE_SECURE=0'); $_SERVER['HTTPS'] = 'on'; $params = Auth::cookieParams(); $this->assert($params['secure'] === false, 'SESSION_COOKIE_SECURE=0 deaktiviert Secure trotz HTTPS-Request'); // Ohne Override: Reverse-Proxy-Header aktiviert Secure automatisch putenv('SESSION_COOKIE_SECURE'); unset($_SERVER['HTTPS']); $_SERVER['HTTP_X_FORWARDED_PROTO'] = 'https'; $params = Auth::cookieParams(); $this->assert($params['secure'] === true, 'X-Forwarded-Proto: https aktiviert Secure automatisch'); } finally { putenv('SESSION_COOKIE_SECURE'); if ($httpsBackup === null) { unset($_SERVER['HTTPS']); } else { $_SERVER['HTTPS'] = $httpsBackup; } if ($forwardBackup === null) { unset($_SERVER['HTTP_X_FORWARDED_PROTO']); } else { $_SERVER['HTTP_X_FORWARDED_PROTO'] = $forwardBackup; } } } }