我在php.ini中将session.cookie_security设置为1/true,并在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之后,“Secure”属性不会出现在set-Cookie头中。使用wget和Firefox进行检查(开发人员工具>切换工具>网络),echo session_get_cookie_params()[secure];会返回结果1,HTTPSCGI参数打开/关闭似乎也并没有什么区别。
echo $_SERVER['HTTPS'];
这在RHEL/CentOS/EL 6(PHP 5.3.3)、RHEL/CentOS/EL 7(PHP 5.4)和Gentoo(PHP 5.6.29)中得到了相同的结果。