使用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更改目录及子目录下所有的文件后缀扩展名的代码
Oct 12 PHP
php设计模式之单例、多例设计模式的应用分析
Jun 30 PHP
PHP性能分析工具XHProf安装使用教程
May 13 PHP
PHP实现中文圆形印章特效
Jun 19 PHP
PHP register_shutdown_function()函数的使用示例
Jun 23 PHP
PHP实现加密文本文件并限制特定页面的存取的效果
Oct 21 PHP
删除PHP数组中的重复元素的实现代码
Apr 10 PHP
利用php-cli和任务计划实现订单同步功能的方法
May 03 PHP
解决laravel 5.1报错:No supported encrypter found的办法
Jun 07 PHP
php数据库的增删改查 php与javascript之间的交互
Aug 31 PHP
yii2中关于加密解密的那些事儿
Jun 12 PHP
Laravel学习笔记之Artisan命令生成自定义模板的方法
Nov 22 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
玩转图像函数库―常见图形操作
2006/09/03 PHP
ThinkPHP单字母函数(快捷方法)使用总结
2014/07/23 PHP
PHP中preg_match函数正则匹配的字符串长度问题
2015/05/27 PHP
实例讲解php数据访问
2016/05/09 PHP
Laravel学习教程之request validation的编写
2017/10/25 PHP
PHP生成随机码的思路与方法实例探索
2019/04/11 PHP
jQuery 方法大全方便学习参考
2010/02/25 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(下:动画篇)
2010/03/24 Javascript
js中for in的用法示例解析
2013/12/25 Javascript
JS+JSP checkBox 全选具体实现
2014/01/02 Javascript
jQuery中on()方法用法实例详解
2015/02/06 Javascript
javascript实现按回车键切换焦点
2015/02/09 Javascript
jQuery+html5+css3实现圆角无刷新表单带输入验证功能代码
2015/08/21 Javascript
常见JS验证脚本汇总
2015/12/01 Javascript
Angular 路由route实例代码
2016/07/12 Javascript
自己封装的一个原生JS拖动方法(推荐)
2016/11/22 Javascript
Vue.js计算属性computed与watch(5)
2016/12/09 Javascript
使用js获取身份证年龄的示例代码
2020/12/11 Javascript
[06:45]DOTA2卡尔工作室 英雄介绍幻影长矛手篇
2013/07/12 DOTA
python 根据pid杀死相应进程的方法
2017/01/16 Python
python中实现字符串翻转的方法
2018/07/11 Python
tensorflow更改变量的值实例
2018/07/30 Python
python将list转为matrix的方法
2018/12/12 Python
Python PIL图片添加字体的例子
2019/08/22 Python
pyenv虚拟环境管理python多版本和软件库的方法
2019/12/26 Python
Python类super()及私有属性原理解析
2020/06/15 Python
Django websocket原理及功能实现代码
2020/11/14 Python
python中pyqtgraph知识点总结
2021/01/26 Python
Python利用socket模块开发简单的端口扫描工具的实现
2021/01/27 Python
基于Canvas+Vue的弹幕组件的实现
2019/07/23 HTML / CSS
CAT鞋英国官网:坚固耐用的靴子和鞋
2016/10/21 全球购物
MyBag中文网:英国著名的时尚包袋电商零售网站
2020/07/31 全球购物
物流专业大学生求职信范文
2013/10/28 职场文书
护士见习期自我鉴定
2014/02/08 职场文书
电厂职工自我鉴定
2014/02/20 职场文书
银行自荐信范文
2015/03/25 职场文书