本文目录导读:

- 通过 PHP 配置文件(php.ini)
- 使用 session_set_cookie_params() 函数
- 修改现有 Cookie
- 使用 setcookie() 函数(PHP 7.3+ 推荐)
- 在 .htaccess 中设置(Apache)
- 检查是否已经设置
- 示例:完整的会话设置
- 重要注意事项
在 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();
重要注意事项
- HttpOnly 的作用:防止 JavaScript 通过
document.cookie访问 cookie,减少 XSS 攻击风险 - 默认设置:PHP 默认
php.ini中session.cookie_httponly通常为 0 - 验证设置:可以通过浏览器的开发者工具查看 cookie 的 HttpOnly 标志
- 兼容性:老版本 PHP (<7.3) 需要使用传统参数传递方式
选择哪种方法取决于你的 PHP 版本和项目的具体需求,推荐使用 session_set_cookie_params() 函数统一设置。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播