ric*_*hie 112
对于PHP自己的Apache会话cookie:
将其添加到Apache配置或.htaccess
<IfModule php5_module>
php_flag session.cookie_httponly on
</IfModule>
Run Code Online (Sandbox Code Playgroud)
这也可以在脚本中设置,只要之前调用它session_start().
ini_set( 'session.cookie_httponly', 1 );
Run Code Online (Sandbox Code Playgroud)
Che*_*oft 84
PHPSESSID默认情况下),请参阅@ richie的回答这个setcookie()和setrawcookie()函数,引入了httponly参数,回到了PHP 5.2.0的黑暗时代,这使得它非常简单.根据语法,只需将第7个参数设置为true即可
为简洁起见,简化了函数语法
setcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
setrawcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
Run Code Online (Sandbox Code Playgroud)
输入NULL您希望保留为默认值的参数.您可能还想考虑是否应该设置secure参数.
也可以使用较旧的较低级header()功能:
header( "Set-Cookie: name=value; httpOnly" );
Run Code Online (Sandbox Code Playgroud)
小智 13
请注意,HttpOnly不会停止跨站点脚本; 相反,它中和了一种可能的攻击,目前仅在IE上执行此操作(FireFox在XmlHttpRequest中暴露HttpOnly cookie,而Safari根本不尊重它).无论如何,打开HttpOnly,但不要在交易中丢弃一小时的输出过滤和模糊测试.
小智 13
请注意,httponly默认情况下不使用PHP会话cookie .
要做到这一点:
$sess_name = session_name();
if (session_start()) {
setcookie($sess_name, session_id(), null, '/', null, null, true);
}
Run Code Online (Sandbox Code Playgroud)
这里有几点需要注意:
session_name()
之前session_start() <?php
//None HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE);
//HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
?>
Run Code Online (Sandbox Code Playgroud)
这里解释来自伊利亚...... 5.2但是
如该文章所述,您可以在以前版本的PHP中自己设置标题
header("Set-Cookie: hidden=value; httpOnly");
Run Code Online (Sandbox Code Playgroud)
您可以在set cookie函数中指定它,请参阅php手册
setcookie('Foo','Bar',0,'/', 'www.sample.com' , FALSE, TRUE);
Run Code Online (Sandbox Code Playgroud)