使用php实现网站验证码功能【推荐】


Posted in PHP onFebruary 09, 2017

验证码是网站常用的一项安全措施,也是新人站长较难掌握的一项技能,这里我向大家介绍一简单有效的验证码实现方法。

开始之前

在正式开始之前我们需要打开php的gd2图形库支持(在php.ini,中搜索“php_gd2.dll”,找到“;extension=php_gd2.dll”并去掉句首的分号) 。

可以参考:如何打开php的gd2库

核心:img.php

这个页面生成一张验证码并将正确数值写入 Session

随机一个4位验证码

$check=rand(1000,9999); 

将生成的验证码写入session

Session_start(); 
$_SESSION["check"] = $check;

创建一张图片

$im = imagecreate(80,30);

由于这种图片的背景默认是黑色的所以我们要用白色填充。

imagefill($im,0,0,ImageColorAllocate($im, 255,255,255)); 

使用imageline随机绘制两条实线

$y1=rand(0,30); 
$y2=rand(0,30); 
$y3=rand(0,30); 
$y4=rand(0,30); 
imageline($im,0,$y1,70, $y3,000); 
imageline($im,0,$y2,70, $y4,000);

在随机位置绘制文字

$strx=rand(3,15); 
$stry=rand(2,15); 
imagestring($img,5,$strx,$stry,substr($check,0,1),ImageColorAllocate($img,34,87,100)); 
$strx+=rand(15,20);
$stry=rand(2,15); 
imagestring($img,5,$strx,$stry,substr($check,1,1),ImageColorAllocate($img,781,117,78)); 
$strx+=rand(15,20);
$stry=rand(2,15); 
imagestring($img,5,$strx,$stry,substr($check,2,1),ImageColorAllocate($img,160,40,40)); 
$strx+=rand(15,20);
$stry=rand(2,15); 
imagestring($img,5,$strx,$stry,substr($check,3,1),ImageColorAllocate($img,25,55,10));

输出图像

Header("Content-type: image/PNG"); 
ImagePNG($img);

结束,下面是完整代码

<?php $check=rand(1000,9999);
Session_start(); 
$_SESSION["check"] = $check; 
$img = imagecreate(80,30); 
imagefill($img,0,0,ImageColorAllocate($img,255,255,255)); 
$y1=rand(0,30); 
$y2=rand(0,30); 
$y3=rand(0,30); 
$y4=rand(0,30); 
imageline($img,0,$y1,70, $y3,ImageColorAllocate($img,55,255,25)); 
imageline($img,0,$y2,70, $y4,ImageColorAllocate($img,55,55,255)); 
$strx=rand(3,15); 
$stry=rand(2,15); 
imagestring($img,5,$strx,$stry,substr($check,0,1),ImageColorAllocate($img,34,87,100)); 
$strx+=rand(15,20);
$stry=rand(2,15); 
imagestring($img,5,$strx,$stry,substr($check,1,1),ImageColorAllocate($img,781,117,78)); 
$strx+=rand(15,20);
$stry=rand(2,15); 
imagestring($img,5,$strx,$stry,substr($check,2,1),ImageColorAllocate($img,160,40,40)); 
$strx+=rand(15,20);
$stry=rand(2,15); 
imagestring($img,5,$strx,$stry,substr($check,3,1),ImageColorAllocate($img,25,55,10)); 
Header("Content-type: image/PNG"); 
ImagePNG($img);

用户界面:index.php

想必大家都知道怎么做,我就直接给出代码了

<!DOCTYPE html>
<html>
<body>
<form action="action.php" method="post">
<input type="text" name="cikle" placeholder="验证码">
<br>
<img id="cikle" style="-webkit-user-select: none" src="img.php"><input type="submit" value="Submit">
</form> 
</body>
</html>

以上的代码将用户输入的数值传递到“action.php”中

检查:action.php

这一步要将用户输入数值与session中的数值进行比对

相等,输出“正确”

不相等,输出“不正确”

<?php
Session_start(); 
if ($_SERVER["REQUEST_METHOD"] == "POST") {
 if($_SESSION["check"]!=intval($_POST["cikle"])){
 echo "不正确";
 }else{
 echo "正确";
 }
}

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

PHP 相关文章推荐
PHP下MAIL的另一解决方案
Oct 09 PHP
来自PHP.NET的入门教程
Oct 09 PHP
fleaphp常用方法分页之Pager使用方法
Apr 23 PHP
记录mysql性能查询过程的使用方法
May 02 PHP
php实现singleton()单例模式实例
Nov 06 PHP
PHP中substr()与explode()函数用法分析
Nov 24 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
Mar 14 PHP
PHP将字符串首字母大小写转换的实例
Jan 21 PHP
Yii2框架实现数据库常用操作总结
Feb 08 PHP
PHP实现网站访问量计数器
Oct 27 PHP
laravel 如何实现引入自己的函数或类库
Oct 15 PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
Apr 23 PHP
form表单传递数组数据、php脚本接收的实例
Feb 09 #PHP
PHP设置Cookie的HTTPONLY属性方法
Feb 09 #PHP
PHP调试及性能分析工具Xdebug详解
Feb 09 #PHP
php从身份证获取性别和出生年月
Feb 09 #PHP
Yii2框架实现数据库常用操作总结
Feb 08 #PHP
Yii2实现中国省市区三级联动实例
Feb 08 #PHP
PHP+Ajax无刷新带进度条图片上传示例
Feb 08 #PHP
You might like
snoopy PHP版的网络客户端提供本地下载
2008/04/15 PHP
php根据年月获取季度的方法
2014/03/31 PHP
PHP利用超级全局变量$_POST来接收表单数据的实例
2016/11/05 PHP
jquerymobile checkbox及时刷新才能获取其准确值
2012/04/14 Javascript
用js实现输入提示(自动完成)的实例代码
2013/06/14 Javascript
jQuery使用andSelf()来包含之前的选择集
2014/05/19 Javascript
js实现点击图片改变页面背景图的方法
2015/02/28 Javascript
js实现不重复导入的方法
2016/03/02 Javascript
浅谈angular懒加载的一些坑
2016/08/20 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
浅析前端路由简介以及vue-router实现原理
2018/06/01 Javascript
Python中条件选择和循环语句使用方法介绍
2013/03/13 Python
简单的通用表达式求10乘阶示例
2014/03/03 Python
Python实现文件内容批量追加的方法示例
2017/08/29 Python
python3处理含有中文的url方法
2018/05/10 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
2019/09/20 Python
在Python中使用turtle绘制多个同心圆示例
2019/11/23 Python
pytorch:torch.mm()和torch.matmul()的使用
2019/12/27 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
2020/04/13 Python
Python字符串三种格式化输出
2020/09/17 Python
利用python汇总统计多张Excel
2020/09/22 Python
CSS3 优势以及网页设计师如何使用CSS3技术
2009/07/29 HTML / CSS
HTML5 canvas基本绘图之绘制线段
2016/06/27 HTML / CSS
墨西哥网上购物:Linio墨西哥
2016/10/20 全球购物
Jo Malone美国官网:祖玛珑香水
2017/03/27 全球购物
Desigual美国官方网站:西班牙服装品牌
2019/03/29 全球购物
90后毕业生的求职信范文
2013/09/21 职场文书
自荐信要包含哪些内容
2013/11/06 职场文书
对孩子的寄语
2014/04/09 职场文书
大学生考试作弊被抓检讨书
2014/12/27 职场文书
二审代理词范文
2015/05/25 职场文书
教师廉政准则心得体会
2016/01/20 职场文书
MybatisPlus代码生成器的使用方法详解
2021/06/13 Java/Android
Python制作表白爱心合集
2022/01/22 Python
JavaScript的Set数据结构详解
2022/02/18 Javascript
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers