问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在Thinkphp中怎么做登陆的验证码

发布网友 发布时间:2022-04-05 23:41

我来回答

4个回答

懂视网 时间:2022-04-06 04:02

下面由ThinkPHP教程栏目给大家介绍ThinkPHP框架之验证码 ,希望对需要的朋友有所帮助!

ThinkVerify类可以支持验证码的生成和验证功能。

下面是最简单的方式生成验证码:

$Verify = new ThinkVerify();$Verify->entry();

上面的代码会生成默认的验证码图片并输出,显示如下:

生成的验证码信息会保存到session中,包含的数据有:

array('verify_code'=>'当前验证码的值','verify_time'=>'验证码生成的时间戳')

如果你需要在一个页面中生成多个验证码的话,entry方法需要传入可标识的信息。

验证码参数

可以对生成的验证码设置相关的参数,以达到不同的显示效果。这些参数包括:

参数描述
expire验证码的有效期(秒)
useImgBg是否使用背景图片 默认为false
fontSize验证码字体大小(像素) 默认为25
useCurve是否使用混淆曲线 默认为true
useNoise是否添加杂点 默认为true
imageW验证码宽度 设置为0为自动计算
imageH验证码高度 设置为0为自动计算
length验证码位数
fontttf指定验证码字体 默认为随机获取
useZh是否使用中文验证码
bg验证码背景颜色 rgb数组设置,例如 array(243, 251, 254)
seKey验证码的加密密钥
codeSet验证码字符集合 3.2.1 新增
zhSet验证码字符集合(中文) 3.2.1 新增

默认参数配置:

参数设置使用两种方式。

实例化传入参数:

或者采用动态设置的方式,如:

验证码字体

默认情况下,验证码的字体是随机使用 ThinkPHP/Library/Think/Verify/ttfs/目录下面的字体文件,我们可以指定验证码的字体,例如:

$Verify = new ThinkVerify();// 验证码字体使用 ThinkPHP/Library/Think/Verify/ttfs/5.ttf$Verify->fontttf = '5.ttf';$Verify->entry();

背景图片

支持验证码背景图片功能,可以如下设置:

$Verify = new ThinkVerify();// 开启验证码背景图片功能 随机使用 ThinkPHP/Library/Think/Verify/bgs 目录下面的图片$Verify->useImgBg = true;$Verify->entry();

中文验证码

如果要使用中文验证码,可以设置:

$Verify = new ThinkVerify();// 验证码字体使用 ThinkPHP/Library/Think/Verify/zhttfs/simhei.ttf$Verify->useZh = true;$Verify->entry();

显示效果如图:

如果无法正常显示,请确认你的 ThinkPHP/Library/Think/Verify/zhttfs/ 目录下面存在中文字体文件。

若ThinkPHP/Library/Think/Verify/zhttfs/里面没有中文字体文件,可以下载或者从C:WindowsFonts里面找到中文字体文件复制过来,注意字体文件扩展名为.ttf。

验证码检测

可以用ThinkVerify类的check方法检测验证码的输入是否正确,例如,下面是封装的一个验证码检测的函数:

// 检测输入的验证码是否正确,$code为用户输入的验证码字符串function check_verify($code, $id = ''){$verify = new ThinkVerify();return $verify->check($code, $id);
}

练习:以登录为例:

控制器方法:

<?php
namespace HomeController;use ThinkController;class LoginController extends Controller
{ function Login()
 { if(empty($_POST))
 {  $this->display(); 
 } 
 else
 {  $code = $_POST["yzm"];  $verify = new ThinkVerify();  if($verify->check($code,2)) //code是用户输入的值 ,2是验证码检测标示,必须与生成的验证码标示相同才能验证  {  if($_POST["uid"]!="" && $_POST["pwd"]!="")
  {   $model = D("Users");   $uid = $_POST["uid"]; 
   $pwd = $_POST["pwd"];   $attr = $model->field("Pwd")->find($uid);   //var_dump($attr);
   if($pwd==$attr["pwd"])
   {
   session("uid",$uid); // 跳转页面之前将$uid存入session   $this->success("登录成功!","Main");      }   else
   {   $this->error("登录失败!"); 
   }
  }  else
   {   $this->error("用户名或者密码不能为空!"); 
   }
  }  else
  {  $this->error("验证码不正确!"); 
  }
 } 
 }//生成验证码的操作方法
 function yzm()
 { $config = array( 
  'fontSize' => 30, // 验证码字体大小 
  'length' => 4, // 验证码位数 
  'useCurve' => true, // 是否画混淆曲线 
  'useNoise' => true, // 关闭验证码杂点
  'expire' => 60, // 验证码有效期(秒)
  'useImgBg' => false, // 使用背景图片
  'useZh' => true, // 使用中文验证码
  'imageW' => 240, // 验证码宽度
  'imageH' => 60, // 验证码高度
  'fontttf' => 'simhei.ttf', // 验证码字体 ); $Verify = new ThinkVerify($config); $Verify->entry(2);//参数是生成验证码的标示,适用于同一个页面有多个验证码的时候,生成验证码的标示必须与检测验证码的标示相同,否则验证码不正确 }?>

请求Login方法:

热心网友 时间:2022-04-06 01:10

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>

热心网友 时间:2022-04-06 02:28

模板中的HTML:

<img src='__APP__/Public/verify/'  id='verifyImg' onClick='freshVerify()' />

点击刷新 的js

    function freshVerify()
    {  
        $('#verifyImg').src='__URL__/verify/'+Math.random(); 
    }

    3.控制器的验证处理:

    if($_SESSION['verify'] != md5($_POST['code']))
    {
        echo '验证码错误';    
    }
    else
    {
        //验证正确后你要进行的下一步操作        
    }

热心网友 时间:2022-04-06 04:03

ThinkPHP自带验证码的函数类,存放路径为:ThinkPHP/Lib/ORG/Util/验证码类
---------------------------------------------------------------
使用的时候只需在Index控制器中引入,方法如下:
public function verify() {
import ( "ORG.Util.Image" );
Image::buildImageVerify ( 4 );
}
---------------------------------------------------------------
在模板页面中调用方法如下:
<img id="verifyImg" src="__URL__/verify/" />
---------------------------------------------------------------
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
亲子照简短句子(亲情定格,幸福永恒) 摄影爱好者,偶尔接人像外拍。有5d4+351.4加60d+501.8,够用吗 5d4配个什么挂机头方便 ...觉得现在钱越来越难挣?说说现在都是做什么生意的? 无限火力游戏破解版 ...乙醇,乙醛,乙酸,乙二醇,烷乙烷之间相互转化的化学方程式_百度... 负二分之一 - 五又五分之一 - 1+三又四分之一 - 4.5+二又三分之一 负二分之一-1又四分之一+ -二又二分之一-负3又四分之三-负1又四分之... 4场3关要对几场 英文励志格言164句 如何解决thinkphp5中验证码常见问题 ASP PHP JSP SQL都指的是什么啊,它们有什么区别呀? 做网站用PHP还是ASP有什么区别? asp和net还有PHP的区别是什么? ASP型空间跟PHP型空间什么区别? 用php和asp开发的网站有什么区别? 对于数据库,ASP和PHP有什么不同吗? 网页的类型asp,php他们有什么区别呀? 网站.php 与 .asp 有什么区别啊? php和asp有什么区别,感觉都是一样的,差不多 php与asp语言的区别:用什么语言进行网页开发最好 php与asp的区别 Asp网站与Php网站的区别在哪里?怎么区别? asp和.php网站的具体区别,各有何优点 php语言和asp语言有什么区别? php redis 可以使用yeild吗 php怎么实现redis阻塞队列 php连接redis是什么服务类型 php和redis如何实现消息队列 php redis实现秒杀 怎么分开执行 thinkphp 验证码怎么调用 thinkphp中验证码怎么实现验证功能 thinkphp 验证码问题 thinkphp手机短信验证码怎么处理 thinkphp 怎么修改默认验证码 thinkphp框架的验证码源码在哪里?请提供版本和对应位置谢谢 WampServer 中用thinkphp框架时 验证码无法显示 如何解决??? thinkphp怎样检验自己生成的验证码 thinkphp5 验证码怎么用 使用thinkPHP 验证码的注意事项? thinkphp如何获取session中的验证码 如何把Thinkphp的验证码单独使用 tp框架中 验证码session为空的原因 thinkphp 中如何判断验证码是否正确 laravel 使用all获取数据库数据的时候,怎么使用数据 laravel5 怎么获取数组形式的数据 为什么Laravel会成为最成功最流行的PHP框架 在laravel或者thinkphp中使用模型获取商品列表时怎么也获取到每条数据对应的分类 PHP的Laravel中的如何从视图中获取来自数据库中的信息并在控制器中获取 laravel数据库读写分离了,如何指定从写的数据库读取数据?