本文目录一览:
PHP 验证码
问题一、你的验证码代码,没有发现开启session,也没有将随机产生的字符串保存到session,没保存,自然就无法比对
问题二、要点击一下刷新,其实很简单,给图片加一个点击事件,让图片重新请求一次服务器执行php验证码文件,需要注意的是,有于缓存的关系,在重新请求服务器的时候,给验证码图片路径加一个随机参数,防止刷新而验证码不变化,代码示例如下:
img src='code.php' onclick="this.src='code.php?'+Math.random();" /
php 登陆验证码通不过
?php
session_start();
$CheckCode=@$_POST['CheckCode'];
$chak=@$_POST['yes'];
if($chak != "ok"){
? form action="abc.php" method="post"
验证码:input type='text' name='CheckCode' /img src='换成你的这个产生验证码代码页面' /
input type="hidden" name="yes" value="ok"
input type="submit" value="提交"
/form
?php
}else{
if(strtolower($CheckCode)!=$_SESSION['authnum']){
echo "scriptalert('校验码不正确!');window.location.href='abc.php';/script";
exit;
}else{
echo "对的checkcode=".$CheckCode."相等于session(authum)".$_SESSION['authnum'];
echo "scriptalert('校验码正确!');window.location.href='bcd.php';/script";
}
}//bcd.php这个什么都没有就是一个空页,你试一下。
?
PHP中模拟登录的验证码问题应该如何解决
基本思路:
首先获取一个cookies值,再带着这个cookies去获取验证码图片,你再带着验证码值和登录数据去模拟post登录。下面是一个模拟获取验证码的。
这里忽略获取cookies的过程。注意文件为UTF-8无BOM格式
?php
header('Content-Type:image/png');
$url = "";//图片链接
$ch = curl_init();
//Cookie:PHPSESSID=121b1127dcded8702c6a1e702c40eca4
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_COOKIE,'PHPSESSID=121b1127dcded8702c6a1e702c40eca4');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT,0);//忽略超时
curl_setopt($ch, CURLOPT_NOBODY, false);
$str = curl_exec($ch);
curl_close($ch);
php验证码怎么实现
1. 新建code.php验证码生成文件
在此之前必须打开php的GD库,修改php.ini文件的配置,取消extension=php_gd2.dll前面的分号。代码如下:
?php
session_start();
//生成验证码图片
Header("Content-type: image/PNG");
$im = imagecreate(44,18);
$back = ImageColorAllocate($im, 245,245,245);
imagefill($im,0,0,$back); //背景
srand((double)microtime()*1000000);
//生成4位数字
for($i=0;$i4;$i++){
$font = ImageColorAllocate($im, rand(100,255),rand(0,100),rand(100,255));
$authnum=rand(1,9);
$vcodes.=$authnum;
imagestring($im, 5, 2+$i*10, 1, $authnum, $font);
}
for($i=0;$i100;$i++) //加入干扰象素
{
$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($im, rand()p , rand()0 , $randcolor);
}
ImagePNG($im);
ImageDestroy($im);
$_SESSION['Checknum'] = $vcodes;
?
2. 显示验证码图片
在需要显示验证码的页面中加入
input type="text" name="passcode"
img src="code.php"
3.判断并获取验证码的值
验证码是通过第一步骤代码中的$_SESSION['Checknum'] = $vcodes;赋的值,所以验证码的值存在$_SESSION['Checknum']当中。在验证页面,使用以下代码,
...
session_start();//启动会话
$code=$_POST["passcode"];
if( $code == $_SESSION["Checknum"])
{...}即可完成验证码登录。
运行截图:
望采纳,谢谢
如何用PHP生成验证码
PHP生成验证码的原理:使用PHP的GD库,生成一张带验证码的图片,并将验证码保存在Session中。PHP生成验证码的大致流程有:
1、产生一张png的图片;
2、为图片设置背景色;
3、设置字体颜色和样式;
4、产生4位数的随机的验证码;
5、把产生的每个字符调整旋转角度和位置画到png图片上;
6、加入噪点和干扰线防止注册机器分析原图片来恶意破解验证码;
7、输出图片;
8、释放图片所占内存。
session_start();
getCode(4,60,20);
function getCode($num,$w,$h) {
$code = "";
for ($i = 0; $i $num; $i++) {
$code .= rand(0, 9);
}
//4位验证码也可以用rand(1000,9999)直接生成
//将生成的验证码写入session,备验证时用
$_SESSION["helloweba_num"] = $code;
//创建图片,定义颜色值
header("Content-type: image/PNG");
$im = imagecreate($w, $h);
$black = imagecolorallocate($im, 0, 0, 0);
$gray = imagecolorallocate($im, 200, 200, 200);
$bgcolor = imagecolorallocate($im, 255, 255, 255);
//填充背景
imagefill($im, 0, 0, $gray);
//画边框
imagerectangle($im, 0, 0, $w-1, $h-1, $black);
//随机绘制两条虚线,起干扰作用
$style = array ($black,$black,$black,$black,$black,
$gray,$gray,$gray,$gray,$gray
);
imagesetstyle($im, $style);
$y1 = rand(0, $h);
$y2 = rand(0, $h);
$y3 = rand(0, $h);
$y4 = rand(0, $h);
imageline($im, 0, $y1, $w, $y3, IMG_COLOR_STYLED);
imageline($im, 0, $y2, $w, $y4, IMG_COLOR_STYLED);
//在画布上随机生成大量黑点,起干扰作用;
for ($i = 0; $i 80; $i++) {
imagesetpixel($im, rand(0, $w), rand(0, $h), $black);
}
//将数字随机显示在画布上,字符的水平间距和位置都按一定波动范围随机生成
$strx = rand(3, 8);
for ($i = 0; $i $num; $i++) {
$strpos = rand(1, 6);
imagestring($im, 5, $strx, $strpos, substr($code, $i, 1), $black);
$strx += rand(8, 12);
}
imagepng($im);//输出图片
imagedestroy($im);//释放图片所占内存
}
在Thinkphp中怎么做登陆的验证码
tp3.2.3中做的一个验证码的例子:
①模块Common/function:
function check_verify($code, $id = ""){
$verify = new \Think\Verify();
return $verify-check($code, $id);
}
②控制器中添加:
public function index(){
$this-display();
}
public function verify_show(){
$config = array(
'fontSize' = 30, // 验证码字体大小
'length' = 4, // 验证码位数
'useNoise' = false, // 关闭验证码杂点
'fontttf' ='5.ttf',
'useImgBg' = true,
);
$Verify = new \Think\Verify($config);
$Verify-entry();
}
public function verify_check(){
$verify = I('post.code');
if(!check_verify($verify)){
$this-error("亲,验证码输错了哦!");
}else{
$this-success('验证码测试成功!');
}
}
③模板中index.html
form action="{:U('Index/VerifyCode/verify_check')}" method="post" class="form-horizontal"
div class="form-group"
label for="code" class="col-sm-2" 验证码/label
div class="col-sm-2"
input type="text" class="form-control" id="code" name="code"
/div
div class="col-sm-5"
img src="{:U('Index/VerifyCode/verify_show')}" onclick="change_verify()" id="img" title="点击刷新"
/div
/div
div class="form-group"
button class="btn btn-primary col-sm-offset-2" type="submit"提交/button
/div
/form
script
function change_verify(){
var url = "{:U('Index/VerifyCode/verify_show')}";
$('#img').attr('src',url);
}
/script