当前位置: 首页 > 图文教程 > 网络编程 > PHP > PHP 验证码登陆校验

PHP
工作笔记:配置MySQL为高可用集群 (1)
MySQL (C API)VC实例及代码下载 (1)(5)
MySQL (C API)VC实例及代码下载 (1)(4)
MySQL (C API)VC实例及代码下载 (1)(3)
MySQL (C API)VC实例及代码下载 (1)(2)
MySQL (C API)VC实例及代码下载 (1)
用JSP连接mysql数据库的方法 (1)(2)
用JSP连接mysql数据库的方法 (1)
MySQL数据库账户授权的相关管理解析 (1)(2)
MySQL数据库账户授权的相关管理解析 (1)
SAP MaxDB MySQL修补数据库严重漏洞
MySQL研发中心成立发布会会后访问整理 (1)(2)
MySQL研发中心成立发布会会后访问整理 (1)
MySQL中SQL-TEXT、DATE和SET数据类型
MySQL存在权限提升及安全限制绕过漏洞
MySQL 卸载的问题
windows下安装、卸载mysql服务
如何正确卸载MySQL
MySQL手册版本 5.0.20-MySQL优化(四) (1)(5)
MySQL手册版本 5.0.20-MySQL优化(四) (1)(4)

PHP 验证码登陆校验


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 76 ::
收藏到网摘: n/a

前几天看见DEV-CLUB实行了验证码登陆校验.昨晚在PHP中进行了实现.欢迎大家和我讨论[email protected]

原理:生成一个图片,并且保存图片中显示的字符到SESSION.在登陆时判断输入的校验码是否和SESSION中校验码相同.
演示地址:

http://www.bingdu.net/bbs/

这是生成校验码和图片的文件checkNumber.php

<?php
session_start();
 
if($act  ==  "init")
{
        Header("Content-type:  image/png");
        srand(microtime()  *  100000);
        $login_check_number  =  strval(rand("1111","9999"));
 
        session_register("login_check_number");
        //这里是使用了SESSION来保存校验码.
        //当然也可以用COOKIE
        //setcookie("login_check_number",$login_check_number);
        //然后将第一行的session_start()删除;
        //不推荐使用COOKIE,因为使用COOKIE并不能进行安全的验证.
 
        $h_img  =  imagecreate(40,17);
        $c_black  =  ImageColorAllocate($h_img,  0,0,0);
        $c_white  =  ImageColorAllocate($h_img,  255,255,255);
        imageline($h_img,  1,  1,  350,  25,  $c_black);
        imagearc($h_img,  200,  15,  20,  20,  35,  190,  $c_white);
        imagestring($h_img,  5,  2,  1,  $login_check_number,  $c_white);
        ImagePng($h_img);
        ImageDestroy($h_img);
 
        die();
}
/*
使用方法:
在HTML文件中加入<input  type=text  name=number  maxlength=4><img  src=checkNumber.php?act=init>
 
在登陆校验PHP页面中加入以下代码(注意:在加入代码前不能有输出,因为使用了SESSION)
 
//$number  是你输入的校验码的值
 
include_once("./checkNumber.php");
 
//检验校验码
 
if($number  !=  $login_check_number  ||  empty($number))
{
        print("校验码不正确!");
        die();
}
*/
?>
使用SESSION的问题:
如果打开登陆页在SESSION的失效后才进行登陆,那么登陆会失败.
使用COOKIE的问题:
COOKIE是保存在客户端的,所以如果使用COOKIE的话还不如不用.

针对VBB论坛.保存checkNumber.php后.修改MYSQL数据库template数据表的title  为  logincode  forumhome_logincode  username_loggedout的template  内容.
然后在member.php的
if  ($action=="login")
后加入

        //检验校验码
        include_once("./checkNumber.php");
        if($number  !=  $login_check_number  ||  $number  ==  "")
        {
                print("校验码不正确!");
                die();
        }