- yymmiinngg
- 等级: 初级会员

- 性别:

- 文章: 14
- 积分: 90
- 来自: 北京

|
近日试着用PHP做了一个验证码程序,示例如下: 一、准备一个展示并提交验证码的页面 <?php
@header("content-type:text/html; charset=UTF-8");
//打开session
session_start();
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PHP验证码示例</title>
</head>
<body>
验证码:<br/>
<iframe id="iimg" height="100" width=300 src="img.php" frameborder="0" ></iframe>
<br/>
<input type=button value="看不清,换一张" onclick="iimg.location.reload();">
<br>
<form action="validate.php" method="post">
输入验证码:<input name="imgId" style="width:60">
<input type="submit" value="确定">
</form>
</body>
</html>
二、以下是验证码生成页面,该页面在第一页面中被<img>调用 <?php
Header("Content-type: image/gif");
session_start();
//验证码为随机字符,以下是算法
$randval;
for($i=0;$i<7;$i++){
$randstr = mt_rand(ord('A'),ord('Z'));
srand((double)microtime()*1000000);
$randv = mt_rand(0,10);
if($randv%2==0){
$randval.=mt_rand(0,10);
}else{
$randval.=chr($randstr);
}
}
//注册验证码到session
session_register($randval);
//以下是绘制验证码图
$height = 50;//图高
$width = 100;//图宽
$im = ImageCreateTrueColor($width, $height);
$white = ImageColorAllocate($im, 255, 255, 255);
$blue = ImageColorAllocate($im, 0, 0, 64);
ImageFill($im, 0, 0, $white);
srand((double)microtime()*1000000000);
ImageLine($im, mt_rand(0,$width/3), mt_rand(0,$height/3), mt_rand($width/3,$width), mt_rand($height/3,$height), $blue);
srand((double)microtime()*1000000);
ImageLine($im, mt_rand($width/3,$width), mt_rand(0,$height/3), mt_rand(0,$width/3), mt_rand(0,$height/3), $blue);
srand((double)microtime()*1000000);
ImageString($im,16 , mt_rand(0,$width - strlen($randval) * 10), mt_rand(0,$height-12), $randval, $blue);
ImageGIF($im);
ImageDestroy($im);
/*
需要注意的是:为了支持以上绘图函数,我们必须在PHP载入GD2图形处理库,可修改 php.ini 文件中的
;extension=php_gd2.dll
为
extension=php_gd2.dll
即开启GD2库
*/
?>
三、这是验证页面,提示是否通过验证 <?php @header("content-type:text/html; charset=UTF-8");
//开启session
session_start();
//得到用户输入的验证码,并转换成大写
$imgId_req = $_REQUEST['imgId'];
$imgId_req = strtoupper($imgId_req);
//验证该字符串是否注册了session变量
if (session_is_registered($imgId_req)) {
echo "<font color=blue >通过验证!</font>";
} else {
echo "<font color=red >验证错误!</font>";
}
//关闭session,以清除所有注册过的变量
session_destroy();
?> 四、开启服务,在地址栏中输入 “.../input.php” ,此处省略了主机及目录名 五、更多有关GD2库的介绍请参考: http://www.cndw.com/tech/server/2006042051613.asp |
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
| 返回顶楼 |
|
|
- zwws
- 等级: 初级会员

- 性别:

- 文章: 7
- 积分: 0
- 来自: 福州

|
本例中SESSION的处理方式比较老... 现在用SUPERGLOBAL哈!
|
| 返回顶楼 |
|
|
- yymmiinngg
- 等级: 初级会员

- 性别:

- 文章: 14
- 积分: 90
- 来自: 北京

|
能提供一个示例吗?我刚接触PHP,想了解多一点!
|
| 返回顶楼 |
|
|
- hellas
- 等级: 初级会员

- 性别:

- 文章: 13
- 积分: 30
- 来自: 北京

|
为什么不用jpgraph的antispam?
|
| 返回顶楼 |
|
|
- yymmiinngg
- 等级: 初级会员

- 性别:

- 文章: 14
- 积分: 90
- 来自: 北京

|
不好意思,本人刚接触PHP,你那有关于“jpgraph的antispam”方面的资料吗?
|
| 返回顶楼 |
|
|
- xombat
- 等级:


- 性别:

- 文章: 171
- 积分: 100
- 来自: 乌托邦

|
看来这里学习php的人很少,大部分都是新手
SESSION老什么?session不也是superglobal?
|
| 返回顶楼 |
|
|
- xombat
- 等级:


- 性别:

- 文章: 171
- 积分: 100
- 来自: 乌托邦

|
zwws 写道 本例中SESSION的处理方式比较老... 现在用SUPERGLOBAL哈!
??疑惑superglobal你是怎么实现的?
想领教一下
|
| 返回顶楼 |
|
|
- boin
- 等级: 初级会员

- 文章: 77
- 积分: 98

|
zwws的意思是 session_is_registered() session_register() 这些函数都是PHP 的old style。
他指的superglobals应该是指 $_SESSION 超全局数组.
|
| 返回顶楼 |
|
|
- ctrlming
- 等级: 初级会员

- 性别:

- 文章: 8
- 积分: 10
- 来自: 北京

|
不知道你在客户端是怎么调用后台生成图片的方法的?
|
| 返回顶楼 |
|
|
- ctrlming
- 等级: 初级会员

- 性别:

- 文章: 8
- 积分: 10
- 来自: 北京

|
明白了 是iimg.location.reload();以前没用过,学会了。
|
| 返回顶楼 |
|
|