首页 > 编程 > PHP > 正文

PHP+Ajax验证码验证用户登录

2020-03-24 18:53:38
字体:
来源:转载
供稿:网友
用AJAX 验证用户登录的一个好处是不刷新跳转页面,外加用到验证码就更安全了,摸索的写了下。一共用到三个文件:yz.php: 生成验证码的PHP 文件,将验证码将在SESSION 里,供登录时对比调用
index.php: 用户登录的HTML 文件
loginCheck.php: 验证用户登录的文件
下面一一解析:
yz.php 文件
session_start(); //生成验证码图 Header("Content-type: image/PNG"); //长与宽 $im = imagecreate(44,18); // 设置背景色: $back = ImageColorAllocate($im, 245,245,245); // 填充背景色: imagefill($im,0,0,$back); srand((double)microtime()*1000000); $vcodes; //生成4位数字 for($i=0;$i $i++){ $font = ImageColorAllocate($im, rand(100,255),rand(0,100),rand(100,255)); $authnum=rand(1,9); $vcodes.=$authnum; imagestring($im, 5, 2+$i*10, 1, $authnum, $font); //加入干扰象素 for($i=0;$i $i++){ $randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255)); imagesetpixel($im, rand()%70 , rand()%30 , $randcolor); ImagePNG($im); ImageDestroy($im); // 将四位的验证码保存在 SESSION 里,登录时调用对比 $_SESSION["VCODE"]=$vcodes;
index.php: 注意,在这文件里不要取 $_SESSION["VCODE"], 否则会取晚一步的,刷新后才能显示上一个验证码在 loginCheck.php 里验证就好了
!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" html xmlns="http://www.w3.org/1999/xhtml" head meta http-equiv="Content-Type" content="text/html;charset=gb2312" title 管理后台| 请登录 /title link rel="stylesheet" type="text/css" href="/css/a.css" style type="text/css" #main{ font-family:宋体; font-size:10pt; text-align:center; margin-top:510px; body{ background-attachment:fixed; background-position:center; background-image:url(./images/w2.jpg); background-repeat: no-repeat; #authCode{background-Color:#F8F9FF;} table{text-align:center;}//-- /style script type="text/javascript" src="./js/trim.js" /script script type="text/javascript" function clearX(){ document.getElementById('authCode').value=""; // 点击图片重新获得新的验证码: function getVCode() { var vcode=document.getElementById('vcode'); vcode.src ='yz.php nocache='+new Date().getTime();
var authCode=trim(document.getElementById('authCode').value); var username=trim(document.getElementById('username').value); var password=trim(document.getElementById('password').value); if(username=="" || password=="" || authCode==""){ alert("请输入用户名和密码和验证码!"); return false; }else{ if(!xmlHttp) xmlHttp=createXmlHttpRequest(); var send_string="username="+username+"&password="+password+"&authCode="+authCode+"&fresh="+Math.random(); xmlHttp.open("POST","loginCheck.php",true); xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); xmlHttp.send(send_string); xmlHttp.onreadystatechange=function(){ if(xmlHttp.readystate==4 && xmlHttp.status==200){ var answer=xmlHttp.responseText; if(answer=="ok") //跳转到管理中心页面 window.location.href="adminCenter.php"; else{ alert("用户名密码或验证码不正确! 请重新输入!"); document.getElementById('username').focus();//-- /script /head body onload="document.getElementById('username').focus();" div id="main" table td 用户名: input type="text" id="username" / /td td 密 码: input type="password" id="password" / /td td 验证码: input type="text" id="authCode" size="6" maxlength="4" value="验证码" onfocus="clearX()"/ /td td img id="vcode" src="yz.php" alt="看不清?点击换一张" / /td td input id="loginButton" type="submit" value="登 录" / /td /tr /table /div /body /html loginCheck.php 验证用户登录的文件
php session_start(); include("../conn/connDB.php"); // 取得POST过来的参数: $username=$_POST["username"]; $password=md5($_POST["password"]); $authCode=$_POST["authCode"]; $feedback="no";//对比是否==SESSION中的验证码,不能放在客户端做,否则取不正确的值 if($authCode==$_SESSION["VCODE"]){ $SQL="select * from users where username='$username' and password='$password'"; $result=mysql_query($SQL); $rows=mysql_num_rows($result); if($rows==1) // 验证成功 $feedback="ok"; $_SESSION["admin"]=true; //为了后台安全,存入SESSION,表明 ADMIN 已登录,供后面调用 echo $feedback;
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持phpstudy。
PHP教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表