PHPUnit ::如何设置和获取cookie的功能,经过测试而没有得到错误:已经发送了标题?
提供错误的示例:
PHPUnit_Framework_Error_Warning:无法修改标题信息 - 已经由
发送的标题MyCookie.php
class MyCookie{
public static function createCookie(){
$uid = null;
$cookieName='test_cookie';
if(!isset($_COOKIE[$cookieName])){
$uid = unique_hash();
setcookie($cookieName, $uid, 0, '', '', false, true);
}
else{
$uid=$_COOKIE[$cookieName];
}
return $uid;
}
}
MyCookieTest.php
class MyCookieTest extends PHPUnit_Framework_TestCase{
public function test_createCookie(){
MyCookie::createCookie();
assertThat(isset($_COOKIE['test_cookie']), is(true));
unset($_COOKIE['test_cookie']);
MyCookie::createCookie();
assertThat(isset($_COOKIE['test_cookie']), is(true));
}
}
由于
答案 0 :(得分:4)
如果你的PHP脚本任何输出,标题将被发送 - 你不能再设置cookie了。您必须首先发送cookie 才能输出任何HTML(或其他输出)。
如果您没有输出任何HTML,那么它可能是偶然输出的空格或Unicode字节顺序标记。如果您的编辑器支持它,请将其设置为不包括UTF-8编码文件中的BOM。
最后,您可以使用output buffering functions延迟发送任何输出,直到您发送了所有标头并设置了Cookie。 (这会不在开始缓冲之前修复意外输出)