PHP 怎么PHP HttpOnly

wen PHP项目 2

本文目录导读:

PHP 怎么PHP HttpOnly

  1. 通过 PHP 配置文件(php.ini)
  2. 使用 session_set_cookie_params() 函数
  3. 修改现有 Cookie
  4. 使用 setcookie() 函数(PHP 7.3+ 推荐)
  5. 在 .htaccess 中设置(Apache)
  6. 检查是否已经设置
  7. 示例:完整的会话设置
  8. 重要注意事项

在 PHP 中设置 HttpOnly 属性有几种方法,以下是主要的方式:

通过 PHP 配置文件(php.ini)

php.ini 中设置:

session.cookie_httponly = 1

使用 session_set_cookie_params() 函数

在启动会话前设置:

// 在 session_start() 之前调用
session_set_cookie_params([
    'lifetime' => 3600,        // 过期时间(秒)
    'path' => '/',
    'domain' => $_SERVER['HTTP_HOST'],
    'secure' => false,         // HTTPS 下设为 true
    'httponly' => true,        // 设置 HttpOnly
    'samesite' => 'Lax'        // 可选:SameSite 属性
]);
session_start();

修改现有 Cookie

如果需要修改已存在的 cookie:

// 删除旧的 cookie
setcookie('session_id', '', time() - 3600, '/');
// 重新设置带 HttpOnly 的新 cookie
setcookie('session_id', session_id(), time() + 3600, '/', '', false, true);
// 参数:name, value, expire, path, domain, secure, httponly

使用 setcookie() 函数(PHP 7.3+ 推荐)

// PHP 7.3 及以上版本支持数组选项
setcookie('cookie_name', 'cookie_value', [
    'expires' => time() + 3600,
    'path' => '/',
    'domain' => 'example.com',
    'secure' => false,
    'httponly' => true,
    'samesite' => 'Lax'
]);

在 .htaccess 中设置(Apache)

php_value session.cookie_httponly 1

检查是否已经设置

function checkHttpOnly() {
    $info = session_get_cookie_params();
    return $info['httponly'] === true;
}
// 输出调试信息
var_dump(session_get_cookie_params());

示例:完整的会话设置

class SecureSession {
    public static function start() {
        // 设置安全的会话参数
        session_set_cookie_params([
            'lifetime' => 1800,        // 30分钟
            'path' => '/',
            'domain' => $_SERVER['HTTP_HOST'],
            'secure' => false,         // 生产环境应设为 true
            'httponly' => true,        // 启用 HttpOnly
            'samesite' => 'Strict'     // CSRF 防护
        ]);
        session_start();
        // 可选:防止会话固定攻击
        if (empty($_SESSION['generated'])) {
            session_regenerate_id(true);
            $_SESSION['generated'] = true;
        }
    }
}
// 使用
SecureSession::start();

重要注意事项

  1. HttpOnly 的作用:防止 JavaScript 通过 document.cookie 访问 cookie,减少 XSS 攻击风险
  2. 默认设置:PHP 默认 php.inisession.cookie_httponly 通常为 0
  3. 验证设置:可以通过浏览器的开发者工具查看 cookie 的 HttpOnly 标志
  4. 兼容性:老版本 PHP (<7.3) 需要使用传统参数传递方式

选择哪种方法取决于你的 PHP 版本和项目的具体需求,推荐使用 session_set_cookie_params() 函数统一设置。

抱歉,评论功能暂时关闭!