事件起因
今天下午我在制造bug的时候,发现我的网站前台出现了这样的......
Warning: Cannot modify header information - headers already sent by (output started at /www/wwwroot/xxxxxxxxxxxxxxx/app/index/login.php:49) in /www/wwwroot/xxxxxxxxxxxxxxx/app/index/login.php on line 62
我就很方
翻译过来的意思就是 “在操作HTTP-header之前,你已经有了网页输出”,它还亲切的提醒了我在哪里进行了输出(第49行)
检查第49行
<a href="/login2.html<?=!empty($_GET['url'])?'?url='.$_GET['url']:""?>">使用背锅侠账号登录</a>
好吧,我承认我输出了......
但是....
但是这样的输出为什么能干扰到第64行的行为呢?
我们去查看第64行的代码
setcookie("state",$state);
好家伙,一行设置cookie的代码
这让我想起来了,写入cookie的行为就是操作header。
这就说得通了
解决措施
将设置cookie的命令提前到文件开头
非要在设置cookie命令前输出的,请使用静态输出手段。