session.cookie_secure未设置安全的cookie属性



我已经将session.cookie_secure设置为1/true php.ini中,并在apache或php-fpm nginx服务器后面运行以下代码 -

<!DOCTYPE html>
<?php
$cookie_name = "user";
$cookie_value = "John Doe";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day
?>
<html>
<body>
<?php
if(!isset($_COOKIE[$cookie_name])) {
    echo "Cookie named '" . $cookie_name . "' is not set!";
} else {
    echo "Cookie '" . $cookie_name . "' is set!<br>";
    echo "Value is: " . $_COOKIE[$cookie_name];
}
?>
</body>
</html>

重新启动PHP-FPM/Apache后,"安全"属性不会出现在Set-Cookie标头中。使用WGET和Firefox(开发人员工具>切换工具>网络)

检查
echo session_get_cookie_params()[secure];

返回1。强迫HTTPS CGI参数开/关不会有所作为。使用 -

验证了此更改
echo $_SERVER['HTTPS'];

这给出了RHEL/CENTOS/EL 6(PHP 5.3.3),RHEL/CENTOS/EL 7(PHP 5.4)和GENTOO(PHP 5.6.29)

,给出了相同的结果。

session.cookie_secure仅适用于PHP的会话扩展名发送的cookie ;即Set-Cookiesession_start()触发的标题,session_regenerate_id()调用。

它不影响 setcookie()setrawcookie()(php中其他可能将cookie发送给客户端的其他内容) - 这些功能为此目的具有自己的$secure参数。

最新更新