2017-02-23 66 views
1

Я установил session.cookie_secure на 1/верно в php.ini и работает следующий код позади апача или PHP-FPM + Nginx сервер -session.cookie_secure не устанавливает безопасный атрибут печенья

<!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. Принуждения HTTPS параметра CGI для включения/выключения не делают разницы. Это изменение было проверено с помощью -

echo $_SERVER['HTTPS']; 

Это дает тот же результат в RHEL/CentOS/EL 6 (РНР 5.3.3), RHEL/CentOS/EL 7 (РНР 5.4) и Gentoo (РНР 5.6.29)

ответ

0

session.cookie_secure конфигурирует безопасный флаг только для файлов cookie, отправленных с расширением сессии PHP; то есть Set-Cookie заголовки, вызванные session_start(), session_regenerate_id() звонки.

Это не влияет на setcookie() или setrawcookie() (ничто другое на PHP, которое может отправлять файлы cookie клиенту) - для этой цели у этих функций есть свой собственный параметр $secure.