本文目录一览:
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验证码怎么实现
- 新建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;
?>
- 显示验证码图片 在需要显示验证码的页面中加入:
<input type="text" name="passcode" />
<img src="code.php" />
- 判断并获取验证码的值
验证码是通过第一步骤代码中的
$_SESSION['Checknum'] = $vcodes;
赋的值,所以验证码的值存在$_SESSION['Checknum']
当中。在验证页面,使用以下代码:
...
session_start(); // 启动会话
$code = $_POST["passcode"];
if ($code == $_SESSION["Checknum"]) {
...
} 即可完成验证码登录。
运行截图:
如何用PHP生成验证码
PHP生成验证码的原理:使用PHP的GD库,生成一张带验证码的图片,并将验证码保存在Session中。PHP生成验证码的大致流程有:
- 产生一张png的图片;
- 为图片设置背景色;
- 设置字体颜色和样式;
- 产生4位数的随机的验证码;
- 把产生的每个字符调整旋转角度和位置画到png图片上;
- 加入噪点和干扰线防止注册机器分析原图片来恶意破解验证码;
- 输出图片;
- 释放图片所占内存。
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>