如何在PHP中设置使用HttpOnly cookie
我如何在我的PHP apps
设置Cookie作为HttpOnly cookies
?
- 对于你的cookies ,看到这个答案。
- 对于PHP自己的会话cookie (默认为
PHPSESSID
),请参阅@ richie的答案
setcookie()
和setrawcookie()
函数在PHP 5.2.0的黑暗时代引入了httponly
参数,使其变得简单易用。 按照语法简单地将第7个参数设置为true
简化函数语法
setcookie( $name, $value, $expire, $path, $domain, $secure, $httponly ) setrawcookie( $name, $value, $expire, $path, $domain, $secure, $httponly )
inputNULL
作为默认参数。 你也可以考虑是否应该设置secure
参数。
也可以使用较旧的较低级别的header()
函数:
header( "Set-Cookie: name=value; httpOnly" );
对于Apache自己的会话cookie:
将其添加到您的Apacheconfiguration或.htaccess
<IfModule php5_module> php_flag session.cookie_httponly on </IfModule>
只要在session_start()
之前调用,也可以在脚本中设置。
ini_set( 'session.cookie_httponly', 1 );
请注意,HttpOnly不会停止跨站点脚本; 相反,它中和一个可能的攻击,目前只有在IE浏览器(火狐公开XHTMLHttpRequest HttpOnly cookie,Safari浏览器根本不尊重它)。 无论如何,打开HttpOnly,但不要放弃一个小时的输出过滤和模糊testing交易。
请注意,PHP会话cookie默认情况下不使用httponly
。
要做到这一点:
$sess_name = session_name(); if (session_start()) { setcookie($sess_name, session_id(), null, '/', null, null, true); }
这里有几个注意事项:
- 你必须在
session_name()
之前调用session_start()
- 这也将默认path设置为“/”,这对于Opera来说是必需的,但是默认情况下哪个PHP会话cookie也不会。
在这里解释从髂骨…只有5.2
httpOnly PHP标志支持PHP 5.2
正如那篇文章所述,你可以在PHP的早期版本中自己设置头文件
header("Set-Cookie: hidden=value; httpOnly");
您可以在设置cookiefunction中指定它, 请参阅PHP手册
setcookie('Foo','Bar',0,'/', 'www.sample.com' , FALSE, TRUE);
<?php //None HttpOnly cookie: setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE); //HttpOnly cookie: setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE); ?>
资源
你可以在头文件中使用它。
// setup session enviroment ini_set('session.cookie_httponly',1); ini_set('session.use_only_cookies',1);
这样所有未来的cookies将使用httponly。
php_flag命令的正确语法是
php_flag session.cookie_httponly On
而且请注意,首先从服务器回答设置cookie,然后在这里(例如,您可以看到“HttpOnly”指令,因此用于在每次testing请求之后从浏览器中删除Cookie。