2017-02-23 295 views
1

我在php.ini中設置session.cookie_secure 1 /真實,在​​後面跟着跑Apache或PHP-FPM + nginx的服務器下面的代碼 -session.cookie_secure不設置安全cookie屬性

<!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 29年5月6日)

回答

0

session.cookie_secure配置安全標記僅用於PHP會話擴展發送的Cookie;即由session_start()session_regenerate_id()呼叫觸發的Set-Cookie標題。

它不影響setcookie()setrawcookie()(也沒有其他任何可能向客戶端發送cookie的PHP) - 這些函數都有自己的$secure參數用於此目的。