设为首页 收藏本站
查看: 603|回复: 0

[经验分享] 图片格式的PHP验证码的实现

[复制链接]

尚未签到

发表于 2017-4-5 10:17:33 | 显示全部楼层 |阅读模式
  上一篇博文中实现了一个完全基于前端的验证码,不过由于其完全是由文本实现,所以安全性上有很大问题。当然一般情况下的验证码都是图片格式的,在网上搜索学习了一番之后,发现图片格式的验证码的实现步骤一般为:
  1. 采用<img>标签作为验证码的容器,其src属性值为生成验证码图片的链接地址(PHP、JSP等);
  2. 服务器端生成验证码图片(即1中的链接)的同时,在session中放入验证码的真实值;
  3. 在验证码的判断逻辑中检查前台传入的输入和session中验证码值;
  4. 如果需要的话,可以为界面中的验证码添加刷新功能。
  

  下面的代码是通过PHP实现的算术题式图片验证码,备用:
  前台HTML:
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>验证码</title><style type="text/css">#code {cursor: pointer;}</style></head><body></body><form action="check.php" method="post"><input type="text" name="input" /><img id="code" alt="点击刷新" title="点击刷新" src="code.php" /><br /><input type="submit" value="确定" /> </form><script type="text/javascript">document.getElementById("code").onclick = function() {this.src = "code.php?t=" + Math.random();}</script></html>验证码图片生成code.php:
  <?php$cimg = imagecreate(100, 30);imagecolorallocate($cimg, 14, 114, 180); // background color$red = imagecolorallocate($cimg, 255, 0, 0);$num1 = rand(1, 99);$num2 = rand(1, 99);session_start();$_SESSION['code'] = $num1 + $num2;imagestring($cimg, 5, 5, 5, $num1, $red);imagestring($cimg, 5, 30, 5, "+", $red);imagestring($cimg, 5, 45, 5, $num2, $red);imagestring($cimg, 5, 70, 5, "=?", $red);header("Content-type: image/png");imagepng($cimg)?>判别逻辑check.php:
  <?phpsession_start();if ($_SESSION['code'] == $_POST['input']) {echo "Pass!";} else {echo "Wrong input!";}?>
如果需要换成Java实现,只需要将验证码生成有PHP实现换成Java实现即可,大同小异。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-360434-1-1.html 上篇帖子: CERL: PHP或Python调用C++实现的服务器 下篇帖子: APC常量定义与PHP的define比较
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表