使用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生成html分页列表的代码
Mar 18 PHP
PHP 木马攻击防御技巧
Jun 13 PHP
关于PHP中Object对象的笔记分享
Jun 28 PHP
PHP新手用的Insert和Update语句构造类
Mar 31 PHP
php中生成随机密码的自定义函数代码
Oct 21 PHP
php中session与cookie的比较
Jan 27 PHP
SESSION存放在数据库用法实例
Aug 08 PHP
解决yii2左侧菜单子级无法高亮问题的方法
May 08 PHP
php实现贪吃蛇小游戏
Jul 26 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
Apr 10 PHP
Laravel框架路由管理简单示例
May 07 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
Dec 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
一台收音机,让一家人都笑逐颜开!
2020/08/21 无线电
php 团购折扣计算公式
2011/11/24 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
2014/04/08 PHP
PHP 设计模式系列之 specification规格模式
2016/01/10 PHP
php图形jpgraph操作实例分析
2017/02/22 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
2019/10/11 PHP
HR vs CL BO3 第一场 2.13
2021/03/10 DOTA
javascript来定义类的规范小结
2010/11/19 Javascript
使用UglifyJS合并/压缩JavaScript的方法
2012/03/07 Javascript
jsonp原理及使用
2013/10/28 Javascript
基于JQuery制作可编辑的表格特效
2014/12/23 Javascript
为JS扩展Array.prototype.indexOf引发的问题及解决办法
2015/01/21 Javascript
百度地图自定义控件分享
2015/03/04 Javascript
基于jquery实现瀑布流布局
2020/06/28 Javascript
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
2017/01/10 Javascript
Javascript的this用法
2017/01/16 Javascript
初学者AngularJS的环境搭建过程
2017/10/27 Javascript
vue 自定义全局方法,在组件里面的使用介绍
2018/02/28 Javascript
vue-cli项目中使用Mockjs详解
2018/05/14 Javascript
浅谈js闭包理解
2019/04/01 Javascript
vue-calendar-component 封装多日期选择组件的实例代码
2020/12/04 Vue.js
[43:26]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第二场 11.20
2020/11/23 DOTA
Python中字典和集合学习小结
2017/07/07 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
2018/02/11 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
2019/04/11 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
2020/03/09 Python
Django Session和Cookie分别实现记住用户登录状态操作
2020/07/02 Python
python 使用递归的方式实现语义图片分割功能
2020/07/16 Python
python 求两个向量的顺时针夹角操作
2021/03/04 Python
CSS3之2D与3D变换的实现方法
2019/01/28 HTML / CSS
详解css3中dispaly的Grid布局与Flex布局
2020/09/11 HTML / CSS
html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
2013/01/09 HTML / CSS
诚信承诺书范文
2014/03/27 职场文书
超市开店计划书
2014/04/26 职场文书
2014小学数学教师个人工作总结
2014/12/18 职场文书
计算机实训心得体会
2016/01/14 职场文书