知码网伴您成长
分类: C#/.net
2013-05-24 20:01:35
现在大多数网站出于版权以及软件授权费用的考虑,大多使用开源的lamp来作为基础构架,lamp也就是linux,apache,mysql以及php,所以我们所处理的很多网站或者说代码中出现的问题所花的时间大多都花在了它们身上。在用php生成的时候有一些问题出现,错误有时候很容易理解,我们很快就解决好了,但是有些问题却莫名其妙,代码没问题,逻辑结构也没漏洞,但是在前端就是见不到验证码图片,这个时候普通人是很难想到其实是php的运行机制在起作用,而我们专业做这一方面工作的也是碰的多了之后才有了经验。
在生成的代码之中,有一个很隐蔽的php运行机制会让大多数刚刚接触php的初学者不知所以然,很多时候我们是将验证码的生成和认证放在同一个页面的,这其中就用到了服务器端session、客户端cookie,还有图片生成技术以及页面类型定义,session用来维系验证生成和验证认证,cookie用来作为客户端唯一性认证防止不同客户之间产生混淆,图片生成技术通过php代码来生成图片内容,前面这三者一般都不会有什么问题产生,就算有问题也能很轻易地找出来,倒是最后一点页面类型定义常常会出现意想不到的状况,我们定义一个页面返回的类型时常用的代码是php里的header函数,比如通过Header("Content-type:
image/png");就返回一个png图片类型的页面,但是这个函数常常会在内部消消地发生改变,比如你在一个php页面的开头处有空白符,那一开始这个页面就将其定义为text/html类型,先将这几个空白符发送给客户端了,当你再定义页面类型为image/png的时候发现来不及了。
页面开头的几个空白符就有可能让你的整个代码失效,而空白符大多数时候却不会引起人的注意,所以当用php生成验证码的时候,一定要小心那几个空白符,如果出现了莫名其妙的问题,那很有可能就是因为你在开头多打了一行空白,多打了几个空格,把它们都删了吧。
更多可参考: