php登陆验证码,php模拟登录识别验证码

发布时间:2023-01-08

本文目录一览:

  1. PHP 验证码
  2. php 登陆验证码通不过
  3. PHP中模拟登录的验证码问题应该如何解决
  4. php验证码怎么实现
  5. 如何用PHP生成验证码
  6. 在Thinkphp中怎么做登陆的验证码

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 "<script>alert('校验码不正确!');window.location.href='abc.php';</script>";
        exit;
    } else {
        echo "对的checkcode=" . $CheckCode . "相等于session(authum)" . $_SESSION['authnum'];
        echo "<script>alert('校验码正确!');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; $i < 4; $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; $i < 100; $i++) // 加入干扰象素
{
    $randcolor = ImageColorallocate($im, rand(0, 255), rand(0, 255), rand(0, 255));
    imagesetpixel($im, rand(), rand(), $randcolor);
}
ImagePNG($im);
ImageDestroy($im);
$_SESSION['Checknum'] = $vcodes;
?>
  1. 显示验证码图片 在需要显示验证码的页面中加入:
<input type="text" name="passcode" />
<img src="code.php" />
  1. 判断并获取验证码的值 验证码是通过第一步骤代码中的$_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>