Я встановив 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 атрибут "secure" не з'являється в заголовку Set-Cookie. Перевіряється за допомогою wget і firefox (інструменти розробника> засоби перемикання> мережа)
echo session_get_cookie_params()[secure];
return 1. Примусовий параметр CGI HTTPS увімкнено / вимкнено. Це зміна перевірено за допомогою -
echo $_SERVER["HTTPS"];
Це дає той самий результат у RHEL / CentOS / EL 6 (PHP 5.3.3), RHEL / CentOS / EL 7 (PHP 5.4) і Gentoo (PHP 5.6.29)
Відповіді:
0 для відповіді № 1session.cookie_secure налаштовує прапор безпеки тільки для файлів cookie, надісланих розширенням сеансу PHP; тобто Set-Cookie
заголовки запускаються session_start()
, session_regenerate_id()
дзвінки
Це не впливає setcookie()
або setrawcookie()
(нічого іншого в PHP, який може посилати куки клієнту) - ці функції мають свої власні $secure
параметр для цієї мети.