<?php
// 生成验证码图片
$img_width = 60; //图片宽度
$img_height = 20;//图片长度
$ix = 6; //文字离右边距离
$iy = 2; //文字离上边距离
$stuff = '123456789ABDEFGHJKLMNPRSTUVWXY';//附加码显示范围ABCDEFGHIJKLMNOPQRSTUVWXYZ
$v_num = 4; //附加码长度
$b = array('0','0','0'); //图片背景色数值范围0-255
$s = array(255,rand(0,255),rand(0,255)); //图片文字颜色
$distance = 14; //字体距离
$x = 80; //杂点数量;
$number = createRandomStr($v_num,$stuff);
$number_len = strlen($number);
$ivalidate = md5(md5($number).CC);
session_start();
$_SESSION["ivalidate"] = $ivalidate;
setcookie("validate",$ivalidate);
setcookie('b','bb');
$img = imageCreate($img_width, $img_height);
ImageColorAllocate($img,$b[0], $b[1], $b[2]);
$white = ImageColorAllocate($img,$s[0],$s[1],$s[2]);
for ($i = 0; $i < $number_len; $i++) {
imageString($img, 5,$ix, $iy, $number[$i], $white);
$ix += $distance;
}
for($i=0;$i<$x;$i++) //加入干扰象素
{
$randcolor = ImageColorallocate($img,$s[0],$s[1],$s[2]);
imagesetpixel($img, rand(0,$img_width) , rand(0,$img_height) , $randcolor);
}
//随机生成验证码
function createRandomStr($strLen,$stuff)
{
list($usec, $sec) = explode(' ', microtime());
(float) $sec + ((float) $usec * 100000);
$number = '';
$number_len = $strLen;
$stuff_len = strlen($stuff) - 1;
for ($i = 0; $i < $number_len; $i++) {
$number .= substr($stuff, mt_rand(0, $stuff_len), 1);
}
return $number;
}
// 输出图片
header("Content-type: " . image_type_to_mime_type(IMAGETYPE_PNG));
imagepng($img);
imagedestroy($img);?>
// 生成验证码图片
$img_width = 60; //图片宽度
$img_height = 20;//图片长度
$ix = 6; //文字离右边距离
$iy = 2; //文字离上边距离
$stuff = '123456789ABDEFGHJKLMNPRSTUVWXY';//附加码显示范围ABCDEFGHIJKLMNOPQRSTUVWXYZ
$v_num = 4; //附加码长度
$b = array('0','0','0'); //图片背景色数值范围0-255
$s = array(255,rand(0,255),rand(0,255)); //图片文字颜色
$distance = 14; //字体距离
$x = 80; //杂点数量;
$number = createRandomStr($v_num,$stuff);
$number_len = strlen($number);
$ivalidate = md5(md5($number).CC);
session_start();
$_SESSION["ivalidate"] = $ivalidate;
setcookie("validate",$ivalidate);
setcookie('b','bb');
$img = imageCreate($img_width, $img_height);
ImageColorAllocate($img,$b[0], $b[1], $b[2]);
$white = ImageColorAllocate($img,$s[0],$s[1],$s[2]);
for ($i = 0; $i < $number_len; $i++) {
imageString($img, 5,$ix, $iy, $number[$i], $white);
$ix += $distance;
}
for($i=0;$i<$x;$i++) //加入干扰象素
{
$randcolor = ImageColorallocate($img,$s[0],$s[1],$s[2]);
imagesetpixel($img, rand(0,$img_width) , rand(0,$img_height) , $randcolor);
}
//随机生成验证码
function createRandomStr($strLen,$stuff)
{
list($usec, $sec) = explode(' ', microtime());
(float) $sec + ((float) $usec * 100000);
$number = '';
$number_len = $strLen;
$stuff_len = strlen($stuff) - 1;
for ($i = 0; $i < $number_len; $i++) {
$number .= substr($stuff, mt_rand(0, $stuff_len), 1);
}
return $number;
}
// 输出图片
header("Content-type: " . image_type_to_mime_type(IMAGETYPE_PNG));
imagepng($img);
imagedestroy($img);?>
所以仅仅用cookie是没法达到验证目的的。还是用session吧,也安全些。
setcookie('b','bb');这段代码改为: $_COOKIE['validate']=$ivalidate;
$_COOKIE['b']='bb';
设置的cookie是经过加密过的,提交过来的验证码 加密下和cookie看是否一样就可以了。关键是我设置cookie得不到。不知道问题出在哪。
加上有效期expire
加上path呢,你使用访问cookie的页和这个生成验证码的页在不在同一目录
不再同一目录,但是我用其它不是生成png图片的php文件设置COOKIE后是可以读取的。