如何在PHP中设置使用HttpOnly cookie

时间:2020-03-05 18:45:40  来源:igfitidea点击:

如何在我的PHP应用程序中将cookie设置为HttpOnly cookies?

解决方案

回答

来自Ilia的解释...仅5.2

PHP 5.2中的httpOnly cookie标志支持

如该文章所述,我们可以在以前的PHP版本中自行设置标头

header("Set-Cookie: hidden=value; httpOnly");

回答

<?php
//None HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, FALSE); 

//HttpOnly cookie:
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE); 

?>

来源

回答

我们可以在set cookie函数中指定它,请参见php手册

setcookie('Foo','Bar',0,'/', 'www.sample.com'  , FALSE, TRUE);

回答

  • 对于Cookie,请参见此答案。
  • 对于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 )

输入" NULL"作为我们希望保留为默认值的参数。
我们可能还需要考虑是否应该设置"安全"参数。

也可以使用较旧的较低级别的header()函数:

header( "Set-Cookie: name=value; httpOnly" );

回答

请注意,HttpOnly不会停止跨站点脚本;它会阻止跨站点脚本。相反,它抵消了一种可能的攻击,目前仅在IE上进行(FireFox在XmlHttpRequest中公开HttpOnly cookie,而Safari根本不接受)。一定要打开HttpOnly,但是在进行交易时,甚至不要花费一个小时的输出过滤和模糊测试。

回答

请注意,默认情况下,PHP会话cookie不使用httponly

要做到这一点:

$sess_name = session_name();
if (session_start()) {
    setcookie($sess_name, session_id(), null, '/', null, null, true);
}

这里有几个注意事项:

  • 我们必须在session_start()之前调用session_name()。
  • 这还将默认路径设置为'/',这对于Opera来说是必需的,但是默认情况下也不使用PHP会话cookie。