使用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中操作MySQL数据库的一些要注意的问题
Oct 09 PHP
PHP Session变量不能传送到下一页的解决方法
Nov 27 PHP
Joomla下利用configuration.php存储简单数据
May 19 PHP
php环境配置之CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI比较?
Oct 17 PHP
Win7下手动安装apache2.2、php5.4笔记
Apr 03 PHP
解决PHP里大量数据循环时内存耗尽的方法
Oct 10 PHP
php 在字符串指定位置插入新字符的简单实现
Jun 28 PHP
使用正则去除php代码中的注释方法
Nov 03 PHP
php+Memcached实现简单留言板功能示例
Feb 15 PHP
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
May 20 PHP
PHP使用pdo连接access数据库并循环显示数据操作示例
Jun 05 PHP
laravel5表单唯一验证的实例代码
Sep 30 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
php笔记之常用文件操作
2010/10/12 PHP
php设计模式 Observer(观察者模式)
2011/06/26 PHP
Trying to clone an uncloneable object of class Imagic的解决方法
2012/01/11 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
PHP生成zip压缩包的常用方法示例
2019/08/22 PHP
Array.slice()与Array.splice()的返回值类型
2006/10/09 Javascript
DOM 脚本编程中的兄弟节点
2009/10/31 Javascript
JS关键字变色实现思路及代码
2013/02/21 Javascript
利用js 进行输入框自动匹配字符的小例子
2013/06/29 Javascript
Js中获取frames中的元素示例代码
2013/07/30 Javascript
JS和jquery获取各种屏幕的宽度和高度的代码
2013/08/02 Javascript
js onload事件不起作用示例分析
2013/10/09 Javascript
js调试系列 控制台命令行API使用方法
2014/06/18 Javascript
修改或扩展jQuery原生方法的代码实例
2015/01/13 Javascript
jQuery可见性过滤器:hidden和:visibility用法实例
2015/06/24 Javascript
Bootstrap面板使用方法
2017/01/16 Javascript
微信小程序实战之自定义抽屉菜单(7)
2017/04/18 Javascript
JS实现把一个页面层数据传递到另一个页面的两种方式
2018/08/13 Javascript
iview通过Dropdown(下拉菜单)实现的右键菜单
2018/10/26 Javascript
浅析Vue.js 中的条件渲染指令
2018/11/19 Javascript
关于自定义Egg.js的请求级别日志详解
2018/12/12 Javascript
vue-cli3 从搭建到优化的详细步骤
2019/01/20 Javascript
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
jquery实现聊天机器人
2020/02/08 jQuery
vue 导航锚点_点击平滑滚动,导航栏对应变化详解
2020/08/10 Javascript
深入浅析Python中join 和 split详解(推荐)
2016/06/30 Python
Python持续监听文件变化代码实例
2020/07/22 Python
详解H5 活动页之移动端 REM 布局适配方法
2017/12/07 HTML / CSS
佳能英国官方网站:Canon UK
2017/08/08 全球购物
师德个人剖析材料
2014/02/02 职场文书
2014年副班长工作总结
2014/12/10 职场文书
电气工程师岗位职责
2015/02/12 职场文书
舞蹈社团活动总结
2015/05/07 职场文书
使用springboot暴露oracle数据接口的问题
2021/05/07 Oracle
Python道路车道线检测的实现
2021/06/27 Python
Java代码规范与质量检测插件SonarLint的使用
2022/08/05 Java/Android