我如何设置的Cookie在我PHP apps
的HttpOnly cookies
?
对于PHP自己的Apache会话cookie:
将其添加到Apache配置或.htaccess
php_flag session.cookie_httponly on
这也可以在脚本中设置,只要之前调用它session_start()
.
ini_set( 'session.cookie_httponly', 1 );
对于您的cookie,请参阅此答案.
对于PHP自己的会话cookie(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 )
输入NULL
您希望保留为默认值的参数.您可能还想考虑是否应该设置secure
参数.
也可以使用较旧的较低级header()
功能:
header( "Set-Cookie: name=value; httpOnly" );
请注意,HttpOnly不会停止跨站点脚本; 相反,它中和了一种可能的攻击,目前仅在IE上执行此操作(FireFox在XmlHttpRequest中暴露HttpOnly cookie,而Safari根本不尊重它).无论如何,打开HttpOnly,但不要在交易中丢弃一小时的输出过滤和模糊测试.
请注意,httponly
默认情况下不使用PHP会话cookie .
要做到这一点:
$sess_name = session_name(); if (session_start()) { setcookie($sess_name, session_id(), null, '/', null, null, true); }
这里有几点需要注意:
你必须调用session_name()
之前session_start()
这也将默认路径设置为'/',这对于Opera是必需的,但是默认情况下哪些PHP会话cookie也没有.
资源
这里解释来自伊利亚...... 5.2但是
PHP 5.2中的httpOnly cookie标志支持
如该文章所述,您可以在以前版本的PHP中自己设置标题
header("Set-Cookie: hidden=value; httpOnly");
您可以在set cookie函数中指定它,请参阅php手册
setcookie('Foo','Bar',0,'/', 'www.sample.com' , FALSE, TRUE);