php header函数功能强大,可以给用户发送各种header头信息,只要header头里面能够发送的内容,都可以通过header函数来完成。如发送302跳转,设置cookie,发送401认证,发现last-modify等等! HTTP/1.1 specification for more information on HTTP headers,都可以用该函数完成。总之一句话,任何服务区response应答的头信息几乎都可以用它来发送。如:
这里我们经常用header发送302跳转,会发现一个问题。在走查代码时候,遇到很多同人会有类似操作代码,如:
1 2 3 4 <?php header("Content-type: text/html; charset=utf-8"); //判断用户是否授权
1 2 3 4 5 6 7 if('用户未授权') { header("location:forbidden.php"); } ///下面是进行摸个记录操作 //删除条记录,或者修改某条记录……
1
这类代码,在开发中很常见,我们会发现,一个没有权限用户,操作该记录,网页会跳转到未授权页面,但是:记录任然被修改了,问题我们找到了,一般操作人员,对于js跳转会知道是前端浏览器跳转的。但是对于php操作跳转,错误认为是服务器跳转,好像php以执行到location,然后就终止了下面运行。 其实,知道header函数真实意义就很容易理解了:header() is used to send a raw HTTP header!
header location 302实际上只是如下:
跟其它普通echo 函数没有多大区别,只是给header信息头,echo 一行而已。
屏蔽Bug方法:
知道了,发送header跳转,服务器不会终止程序,因此为了安全起见。header locaction后,最好加一句exit()函数。 这样,php解析引擎就会停止解析了!我们正确方法是封装个header_302方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <?php /*header_302跳转* * * *@author http://blog.chacuo.net/ * @param string $url 跳转url */ function header_302($url) { if(headers_sent()) { exit('header 已经发送过!'); } header("location:$url"); exit(); }
后记:这类问题,不光出在php程序中,其它很多header loction跳转语言程序,原理相同。都有类似功能,很多时候。都是使用时候没有注意,造成的。 容易在代码走查中,遗漏掉!好了,先到这里,欢迎交流!
作者:程默的博客 QQ:8292669
原文网址:http://blog.chacuo.net/276.html
订阅保持关注:http://blog.chacuo.net/feed
本文版权归作者所有,欢迎转载,请务必添加原文链接。