CI_中使用自定义的验证码
2015-08-30 22:33
741 查看
注意点:
1.base_url()并不能调用views中的文件。
2.后台接收session的时候必须先用session_start()开启会话。
步骤一:复制以下代码,并保存为check.php文件,存放于static目录中(这个是DIY的验证码文件)
<?php
header("Content-Type:image/png");
//include_once("../../include/common.php");
#shuffle the charactors
// ASCII转字符
function strtoascii($start,$range){
$str='';
for($i=$start;$i<=($start+$range);$i++){
$str.=chr($i);
}
return $str;
}
//随机数
function randstr(){
$chars=strtoascii(65,25).strtoascii(48,9).strtoascii(97,25);
$chars=trim($chars);
$res = str_shuffle($chars);
$str = substr($res,0,5);
//return strtolower($str);
return $str;
}
//画布
$width=100;$height=20;$paint = imagecreatetruecolor($width,$height);
//背景色source,RGB
$backgroundcolor=imagecolorallocate($paint,64,128,255);
//前景色source,RGB
$frontcolor=imagecolorallocate($paint,255,255,255);
//矩形
imagefilledrectangle($paint,0,0,$width,$height,$backgroundcolor);
//生成随机字符
$get_code= randstr();
//写入随机字符
imagestring($paint,20,20,1,$get_code,$frontcolor);
//生成随机像素点
for($i=0;$i<=200;$i++){
$x = mt_rand(0,$width);
$y = mt_rand(0,$height);
imagesetpixel($paint,$x,$y,imagecolorallocate($paint,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)));
}
//会话开启-***必须开启,不然会失败****_
session_start();
//把随机字符存入会话
$_SESSION['bug']=$get_code;
imagepng($paint); //在浏览器上面输出一张png图片
?>
步骤二:把下面代码复制到需要显示验证码的地方(也就是views里面的需要验证码的文件)
<img src="<?php echo base_url('static/check.php');?>" onclick='_refresh(this);' />
<!--验证码刷新的js-->
<script type="text/javascript">
function _refresh(el){
_value=el.getAttribute('src');
el.setAttribute('src',_value+"?");
}
</script>
步骤三:在后台接受并验证session
public function captcha(){
session_start();//必须开启session,不然会报错
//var_dump($_SESSION['bug']);exit;
$yz = $this->input->post('yz')?$this->input->post('yz'):NULL;
if($yz == $_SESSION['bug']){
exit($yz);
}
else{
exit("please input the captcha!!!");
}
}
1.base_url()并不能调用views中的文件。
2.后台接收session的时候必须先用session_start()开启会话。
步骤一:复制以下代码,并保存为check.php文件,存放于static目录中(这个是DIY的验证码文件)
<?php
header("Content-Type:image/png");
//include_once("../../include/common.php");
#shuffle the charactors
// ASCII转字符
function strtoascii($start,$range){
$str='';
for($i=$start;$i<=($start+$range);$i++){
$str.=chr($i);
}
return $str;
}
//随机数
function randstr(){
$chars=strtoascii(65,25).strtoascii(48,9).strtoascii(97,25);
$chars=trim($chars);
$res = str_shuffle($chars);
$str = substr($res,0,5);
//return strtolower($str);
return $str;
}
//画布
$width=100;$height=20;$paint = imagecreatetruecolor($width,$height);
//背景色source,RGB
$backgroundcolor=imagecolorallocate($paint,64,128,255);
//前景色source,RGB
$frontcolor=imagecolorallocate($paint,255,255,255);
//矩形
imagefilledrectangle($paint,0,0,$width,$height,$backgroundcolor);
//生成随机字符
$get_code= randstr();
//写入随机字符
imagestring($paint,20,20,1,$get_code,$frontcolor);
//生成随机像素点
for($i=0;$i<=200;$i++){
$x = mt_rand(0,$width);
$y = mt_rand(0,$height);
imagesetpixel($paint,$x,$y,imagecolorallocate($paint,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)));
}
//会话开启-***必须开启,不然会失败****_
session_start();
//把随机字符存入会话
$_SESSION['bug']=$get_code;
imagepng($paint); //在浏览器上面输出一张png图片
?>
步骤二:把下面代码复制到需要显示验证码的地方(也就是views里面的需要验证码的文件)
<img src="<?php echo base_url('static/check.php');?>" onclick='_refresh(this);' />
<!--验证码刷新的js-->
<script type="text/javascript">
function _refresh(el){
_value=el.getAttribute('src');
el.setAttribute('src',_value+"?");
}
</script>
步骤三:在后台接受并验证session
public function captcha(){
session_start();//必须开启session,不然会报错
//var_dump($_SESSION['bug']);exit;
$yz = $this->input->post('yz')?$this->input->post('yz'):NULL;
if($yz == $_SESSION['bug']){
exit($yz);
}
else{
exit("please input the captcha!!!");
}
}
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- java自动生成验证码插件-kaptcha
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- 如何识别高级的验证码的技术总结第1/4页
- PHP 5.3.0 安装分析心得
- apache 环境下 php 的配置注意事项
- ASP.NET、ASP、PHP、JSP之间有什么区别?
- PHP VBS JS 函数 对照表