要求

1)实现Email形式的注册功能和相应的登录功能;
2)实现忘记密码时的密码找回功能;
3)存在数据库中的密码不能以明文形式存放,即建议在浏览器端发送请求前,调用js代码对用户的密码做md5加密

分析

第3)点较简单,重点学习一波email接收验证码。

网上粗略了解了一下,PHP自带mail()函数可实现邮件的收发,但在php5.3版本后需开启本地email服务器才能使用。

所以搭建了hmailserver服务,具体参考:

mysql+hmailServer+roundcubemail整合开发(一)

hMailServer安装使用教程

Hmailserver+mysql+php安装指南

文件拓扑

代码及演示

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>web实验2</title>
<script type="text/javascript" src="function.js"></script>
<script type="text/javascript" src="md5.js"></script>
</head>
<body><form name="fm1" action="index.php" method="post" οnsubmit="return IsEmpty()"><div style="text-align: center;"><h1>登录页面&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</h1><br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="text" name="user" placeholder="帐号" id="usr"/><select name="mail"><option value="@163.com">@163.com</option><option value="@126.com">@126.com</option><option value="@hdu.edu.cn">@hdu.edu.cn</option></select></br><input type="password" name="password_plain" placeholder="密码" id="pwd"/><input type=hidden name="password_md5" id="pwd1" /><a href="resetpwd.php">忘记密码?</a></br><input type="submit" name="submit" value="登录" οnclick="enCodePWD()"/><button οnclick="location.href='register.php'" type="button">注册</button>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
</form>
</body>
</html>

login.php

当登录为空

亦或

<!DOCTYPE html>
<html>
<html>
<head>
<meta charset="UTF-8">
<title>web实验2</title>
<script type="text/javascript" src="function.js"></script>
<script type="text/javascript" src="md5.js"></script>
</head>
<body><form name="fm1" action="" method="post" οnsubmit="return IsEmpty()"><div style="text-align: center;"><h1>注册页面&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</h1><br><br><br>*<input type="text" name="user" placeholder="帐号" id="usr"/><select name="mail"><option value="@163.com">@163.com</option><option value="@126.com">@126.com</option><option value="@hdu.edu.cn">@hdu.edu.cn</option></select></br>*<input type="password" name="password_plain" placeholder="密码" id="pwd"/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=hidden name="password_md5" id="pwd1" /></br>&nbsp;&nbsp;*<input type="text" name="code" placeholder="验证码" id="cd"/><button type="submit" name="bttn" value="1" οnclick="IsEmpty()">点击获取验证码</button></br><input type="submit" name="submit" value="注册" οnclick="enCodePWD()"/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
</form>
</body>
</html><?php
$servername = "localhost";$usernm = "root";$passwd = "root";$dbname = "test";
@$c_user=@$_POST['user'].@$_POST['mail'];@$c_password=@$_POST['password_md5'];
if((@$_POST['submit'] || @$_POST['bttn']) && $_POST['user'] && $_POST['password_plain']){// 创建连接$conn = mysqli_connect($servername, $usernm, $passwd, $dbname);// 检测连接if (!$conn) {die("连接失败: ".mysqli_connect_error());} else{@$sql = "SELECT * FROM client where user='".$c_user."'";$result = mysqli_query($conn, $sql);//检错if (!$result) {printf("Error: %s\n", mysqli_error($conn));exit();}//查询用户是否存在if (mysqli_num_rows($result)) {echo '<script>alert("用户已存在!");history.go(-1);</script>';}else{if(@$_POST['bttn'])include_once("reqcode.php");elseinclude_once("reg.php");}$conn->close();}
}
?>

register.php

先判断账号/密码是否为空/合法

没输入验证码就注册

注册用户已存在

否则

登录邮箱接收验证码

验证码有效时间1分钟

成功注册,3s后自动跳转login.php

<!DOCTYPE html>
<html>
<html>
<head>
<meta charset="UTF-8">
<title>web实验2</title>
<script type="text/javascript" src="function.js"></script>
<script type="text/javascript" src="md5.js"></script>
</head>
<body><form name="fm1" action="" method="post"><div style="text-align: center;"><h1>更改密码&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</h1><br><br><br>*<input type="text" name="user" placeholder="帐号" id="usr"/><select name="mail"><option value="@163.com">@163.com</option><option value="@126.com">@126.com</option><option value="@hdu.edu.cn">@hdu.edu.cn</option></select></br>*<input type="password" name="password_plain" placeholder="新密码" id="pwd"/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>*<input type="password" name="password_cfm" placeholder="确认密码" οnblur="return confirm_pwd()" id="pwd2"/></input>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type=hidden name="password_md5" id="pwd1" /></br>&nbsp;&nbsp;*<input type="text" name="code" placeholder="验证码" id="cd"/><button type="submit" name="bttn" value="1" οnclick="IsEmpty()">点击获取验证码</button></br><input type="submit" name="submit" value="提交" οnclick="enCodePWD()"/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div>
</form>
</body>
</html><?php
$servername = "localhost";$usernm = "root";$passwd = "root";$dbname = "test";
@$c_user=@$_POST['user'].@$_POST['mail'];@$c_password=@$_POST['password_md5'];
if((@$_POST['submit'] || @$_POST['bttn']) && $_POST['user'] && $_POST['password_plain'] && $_POST['password_cfm']){// 创建连接$conn = mysqli_connect($servername, $usernm, $passwd, $dbname);// 检测连接if (!$conn) {die("连接失败: ".mysqli_connect_error());} else{@$sql = "SELECT * FROM client where user='".$c_user."'";$result = mysqli_query($conn, $sql);//查询用户是否存在if (mysqli_num_rows($result)) {if(@$_POST['bttn'])include_once("reqcode.php");elseinclude_once("chng.php");}else{echo '<script>alert("用户不存在!");history.go(-1);</script>';}$conn->close();}
}
?>

resetpwd.php

确认密码不一致

成功修改

(其他演示同注册页面)

<?php
$servername = "localhost";$usernm = "root";$passwd = "root";$dbname = "test";
if(@$_POST['submit']){$c_user=$_POST['user'].$_POST['mail'];$c_password=$_POST['password_md5'];
}
// 创建连接
$conn = mysqli_connect($servername, $usernm, $passwd, $dbname);
// 检测连接
if (!$conn) {die("连接失败: ".mysqli_connect_error());
}
else{@$sql = "SELECT * FROM client where user='".$c_user."' and "."password='".$c_password."'";$result = mysqli_query($conn, $sql);//检错if (!$result) {printf("Error: %s\n", mysqli_error($conn));exit();}//查询成功if (mysqli_num_rows($result)) {//输出数据$row = mysqli_fetch_assoc($result);$username=$row["user"];echo "Welcome~:".$username."<br>"."Ur password~:".$row["password"];}else{echo '<script>alert("用户名或密码错误!");history.go(-1);</script>';}$conn->close();
}
?>

index.php

<?phpsession_start();$rd = rand(100000,999999);
$to = $c_user;
$subject = "验证码";
$message = $rd;
$from = "server@test4fun.cn";
$headers = "From: $from";
if(mail($to,$subject,$message,$headers)){echo "<br><br><div style='text-align: center;'>:)<br>验证码已发送至邮箱:".$c_user."<br>注册密码:".$_POST['password_plain']."<br>请注意查收!!!</div>";
}setcookie('rd', $rd, time()+5*60);//验证码
setcookie('tm', time(), time()+5*60);//验证码失效时间的起始时间戳?>

reqcode.php

<?php
//检测验证码是否为空
if(!$_POST['code']){echo '<script>alert("验证码为空!");history.go(-1);</script>';exit();
}
//验证码失效时间为60秒
if (time() - @$_COOKIE['tm'] < 60){if ($_POST['code'] == $_COOKIE["rd"]) {@$sqli = "INSERT INTO client (user,password) VALUES ('".$c_user."','".$c_password."')";$result = mysqli_query($conn, $sqli);if ($result) {header('refresh:3; url=login.php');echo "<br><br><div style='text-align: center;'>):<br>注册成功,请登录!</div>";;}}else{echo "<br><br><div style='text-align: center;'>:(<br>验证码错误!</div>";}
}
else{echo "<br><br><div style='text-align: center;'>:(<br>验证码已过期!</div>";
}?>

reg.php

<?php
//检测验证码是否为空
if(!$_POST['code']){echo '<script>alert("验证码为空!");history.go(-1);</script>';exit();
}
//验证码失效时间为60秒
if (time() - @$_COOKIE['tm'] < 60){if ($_POST['code'] == $_COOKIE["rd"]) {@$sqli = "UPDATE client SET password = '".$c_password."' WHERE user = '".$c_user."'";$result = mysqli_query($conn, $sqli);if ($result) {header('refresh:3; url=login.php');echo "<br><br><div style='text-align: center;'>):<br>密码修改成功,请登录!</div>";;}}else{echo "<br><br><div style='text-align: center;'>:(<br>验证码错误!</div>";}
}
else{echo "<br><br><div style='text-align: center;'>:(<br>验证码已过期!</div>";
}?>

chng.php

//md5加密密码
function enCodePWD(){document.getElementById('pwd1').value=md5(document.getElementById('pwd').value);
}function IsEmpty(){var usr = document.getElementById("usr");//判断用户名是否为空if(usr.value==""){alert(":( 用户名不能为空!");return false;}//判断用户名是否合法if(/^[a-zA-Z0-9]{6,14}$/.test(usr.value) != true){alert(":( 用户名不合法!");return false;}var passwd = document.getElementById("pwd");//判断密码是否为空if(passwd.value==""){alert(":( 密码不能为空!");return false;}return true;
}function confirm_pwd(){var passwd = document.getElementById("pwd");var passwd_cfm = document.getElementById("pwd2");if(passwd.value != passwd_cfm.value){alert("密码不一致");passwd_cfm.value = "";return false;}return true;
}/*
var wait=11;
function renew_btn(){var btn=document.getElementById("btn");if(wait == 0){btn.removeAttribute("disabled");btn.innerHTML="重新获取验证码";wait=60;}else{if(wait == 11){alert("验证码已发送至你的邮箱,请尽快查收~!");}btn.setAttribute("disabled", true);if(wait<10){btn.innerHTML="&nbsp;&nbsp;重新发送(0"+wait+")&nbsp;&nbsp;";}else{btn.innerHTML="&nbsp;&nbsp;重新发送("+wait+")&nbsp;&nbsp;";}wait--;setTimeout(function(){renew_btn()},1000)}
}
*/

function.js

!function(n){"use strict";function t(n,t){var r=(65535&n)+(65535&t);return(n>>16)+(t>>16)+(r>>16)<<16|65535&r}function r(n,t){return n<<t|n>>>32-t}function e(n,e,o,u,c,f){return t(r(t(t(e,n),t(u,f)),c),o)}function o(n,t,r,o,u,c,f){return e(t&r|~t&o,n,t,u,c,f)}function u(n,t,r,o,u,c,f){return e(t&o|r&~o,n,t,u,c,f)}function c(n,t,r,o,u,c,f){return e(t^r^o,n,t,u,c,f)}function f(n,t,r,o,u,c,f){return e(r^(t|~o),n,t,u,c,f)}function i(n,r){n[r>>5]|=128<<r%32,n[14+(r+64>>>9<<4)]=r;var e,i,a,d,h,l=1732584193,g=-271733879,v=-1732584194,m=271733878;for(e=0;e<n.length;e+=16)i=l,a=g,d=v,h=m,g=f(g=f(g=f(g=f(g=c(g=c(g=c(g=c(g=u(g=u(g=u(g=u(g=o(g=o(g=o(g=o(g,v=o(v,m=o(m,l=o(l,g,v,m,n[e],7,-680876936),g,v,n[e+1],12,-389564586),l,g,n[e+2],17,606105819),m,l,n[e+3],22,-1044525330),v=o(v,m=o(m,l=o(l,g,v,m,n[e+4],7,-176418897),g,v,n[e+5],12,1200080426),l,g,n[e+6],17,-1473231341),m,l,n[e+7],22,-45705983),v=o(v,m=o(m,l=o(l,g,v,m,n[e+8],7,1770035416),g,v,n[e+9],12,-1958414417),l,g,n[e+10],17,-42063),m,l,n[e+11],22,-1990404162),v=o(v,m=o(m,l=o(l,g,v,m,n[e+12],7,1804603682),g,v,n[e+13],12,-40341101),l,g,n[e+14],17,-1502002290),m,l,n[e+15],22,1236535329),v=u(v,m=u(m,l=u(l,g,v,m,n[e+1],5,-165796510),g,v,n[e+6],9,-1069501632),l,g,n[e+11],14,643717713),m,l,n[e],20,-373897302),v=u(v,m=u(m,l=u(l,g,v,m,n[e+5],5,-701558691),g,v,n[e+10],9,38016083),l,g,n[e+15],14,-660478335),m,l,n[e+4],20,-405537848),v=u(v,m=u(m,l=u(l,g,v,m,n[e+9],5,568446438),g,v,n[e+14],9,-1019803690),l,g,n[e+3],14,-187363961),m,l,n[e+8],20,1163531501),v=u(v,m=u(m,l=u(l,g,v,m,n[e+13],5,-1444681467),g,v,n[e+2],9,-51403784),l,g,n[e+7],14,1735328473),m,l,n[e+12],20,-1926607734),v=c(v,m=c(m,l=c(l,g,v,m,n[e+5],4,-378558),g,v,n[e+8],11,-2022574463),l,g,n[e+11],16,1839030562),m,l,n[e+14],23,-35309556),v=c(v,m=c(m,l=c(l,g,v,m,n[e+1],4,-1530992060),g,v,n[e+4],11,1272893353),l,g,n[e+7],16,-155497632),m,l,n[e+10],23,-1094730640),v=c(v,m=c(m,l=c(l,g,v,m,n[e+13],4,681279174),g,v,n[e],11,-358537222),l,g,n[e+3],16,-722521979),m,l,n[e+6],23,76029189),v=c(v,m=c(m,l=c(l,g,v,m,n[e+9],4,-640364487),g,v,n[e+12],11,-421815835),l,g,n[e+15],16,530742520),m,l,n[e+2],23,-995338651),v=f(v,m=f(m,l=f(l,g,v,m,n[e],6,-198630844),g,v,n[e+7],10,1126891415),l,g,n[e+14],15,-1416354905),m,l,n[e+5],21,-57434055),v=f(v,m=f(m,l=f(l,g,v,m,n[e+12],6,1700485571),g,v,n[e+3],10,-1894986606),l,g,n[e+10],15,-1051523),m,l,n[e+1],21,-2054922799),v=f(v,m=f(m,l=f(l,g,v,m,n[e+8],6,1873313359),g,v,n[e+15],10,-30611744),l,g,n[e+6],15,-1560198380),m,l,n[e+13],21,1309151649),v=f(v,m=f(m,l=f(l,g,v,m,n[e+4],6,-145523070),g,v,n[e+11],10,-1120210379),l,g,n[e+2],15,718787259),m,l,n[e+9],21,-343485551),l=t(l,i),g=t(g,a),v=t(v,d),m=t(m,h);return[l,g,v,m]}function a(n){var t,r="",e=32*n.length;for(t=0;t<e;t+=8)r+=String.fromCharCode(n[t>>5]>>>t%32&255);return r}function d(n){var t,r=[];for(r[(n.length>>2)-1]=void 0,t=0;t<r.length;t+=1)r[t]=0;var e=8*n.length;for(t=0;t<e;t+=8)r[t>>5]|=(255&n.charCodeAt(t/8))<<t%32;return r}function h(n){return a(i(d(n),8*n.length))}function l(n,t){var r,e,o=d(n),u=[],c=[];for(u[15]=c[15]=void 0,o.length>16&&(o=i(o,8*n.length)),r=0;r<16;r+=1)u[r]=909522486^o[r],c[r]=1549556828^o[r];return e=i(u.concat(d(t)),512+8*t.length),a(i(c.concat(e),640))}function g(n){var t,r,e="";for(r=0;r<n.length;r+=1)t=n.charCodeAt(r),e+="0123456789abcdef".charAt(t>>>4&15)+"0123456789abcdef".charAt(15&t);return e}function v(n){return unescape(encodeURIComponent(n))}function m(n){return h(v(n))}function p(n){return g(m(n))}function s(n,t){return l(v(n),v(t))}function C(n,t){return g(s(n,t))}function A(n,t,r){return t?r?s(t,n):C(t,n):r?m(n):p(n)}"function"==typeof define&&define.amd?define(function(){return A}):"object"==typeof module&&module.exports?module.exports=A:n.md5=A}(this);

md5.js

转载于:https://www.cnblogs.com/p0pl4r/p/10758395.html

Email接收验证码,以实现登录/注册/修改密码相关推荐

  1. IDEA版最新SMM整合,根据手机号实现登录/注册/修改密码

    IDEA版最新SMM整合,根据手机号实现登录/注册/修改密码 最近一直在进行springboot的项目,前一阵子项目组接手了一个SSM项目,需要实现手机短信验证的相关功能.于是自己进行了重操,整合了网 ...

  2. java对mysql的简单操作的综合运用——登录+注册+修改密码

    本篇博客是java对mysql的简单操作的综合运用--登录系统.java对mysql的简单操作的综合运用--注册系统.java对mysql的简单操作的综合运用--修改密码系统的整合. 因为使用的是数据 ...

  3. AndroidStudio实现简易android登录注册修改密码页面。

    利用sqlite实现简易登录注册以及修改密码功能. 页面设计 登录页面activity_login.xml <?xml version="1.0" encoding=&quo ...

  4. 【php】基于php+mysql 简单的登录注册修改密码系统

    对于php和mysql的连接在许多blog上都有说明,为了将mysql中的查询,修改,插入等操作掌握,本文介绍了一下如何采用mysql做一个登录注册修改密码的网页. 其中, 1.登录-即为对数据库中的 ...

  5. 简单注册、登录、修改密码、忘记密码程序

    简单注册.登录.修改密码.忘记密码程序 来自一枚大二通信工程渣渣写的代码 #include<stdio.h> #include<stdlib.h> #include<st ...

  6. c#web窗体登录界面登录注册以及密码找回发送邮箱功能

    c#web窗体登录界面登录注册以及密码找回发送邮箱功能 效果图如下: 1.登录界面aspx代码 <%@ Page Language="C#" AutoEventWireup= ...

  7. 5.登录注册找回密码

    登录注册找回密码 登录  登录方式有账号密码登录.扫码登录.手机验证登录和第三方登录.  手机登录,登录快捷方便,不用记住密码,但是必须有手机在身边.  账号密码登录,需要记住密码,容易遗忘,可以和手 ...

  8. 【Openfire】网页版的用户注册、登录、修改密码

    Openfire客户端的开发是借助Smack提供的方法.Smack可以从官网下载.如果是Openfire3.7.1的版本,建议使用Smack3.2.2与其匹配.官网地址:http://www.igni ...

  9. 如何防止短信验证码接口、登录注册入口被恶意调用攻击?

    目录 前言 1.短信验证码是什么? 2.为什么要对短信验证码进行防护? 3.有哪些常见的防护手段? 4.这些防护手段有没有用呢,到底该如何选择? 5.结语 前言 最近遇到一个关于防止短信验证码被刷的问 ...

最新文章

  1. Swing俄罗斯游戏编写详解(附源码)
  2. 又见斐波那契数列(矩阵构造+矩阵快速幂)
  3. 2018年第九届蓝桥杯 - 省赛 - C/C++大学B组 - G.螺旋折线
  4. jvm线程分析命令_JVM:如何分析线程转储
  5. kafka修改默认端口号
  6. [转载]对称加密DES和TripleDES
  7. SQLServer 批量插入数据的两种方法
  8. 【重识 HTML + CSS】背景相关知识点
  9. 电子商务网站建设策划书_网站建设及推广的5大注意事项
  10. 关于数据挖掘(协同过滤、关联推荐、聚类分类)一些资料(转)
  11. 是什么门的缩写_什么是FBA
  12. Java POI输出excel单元格画斜线
  13. 从劳动分工的角度理解CPU、FPGA和ASIC
  14. 查看linux版本32还是64位,查看linux系统版本是32位的还是64位的
  15. 基于ResNet的猫十二分类
  16. Vue前端开发——微信扫码支付
  17. html背景对联效果恭贺新春,恭贺新春对联横批大全
  18. f4v转换器怎么将f4v格式转换为flv格式
  19. 信捷PLC的C语言程序写法例子
  20. 只有浏览器显示找不到服务器dns

热门文章

  1. JSON Format插件使用
  2. 第五章:最后一步准备,1.8的Json模型、状态描述机制详解
  3. python爬取煎蛋美眉
  4. xen-3.4.2安装(一)
  5. Kubernetes如何使用ReplicationController、Replica Set、Deployment管理Pod
  6. 7Z010 引脚功能详解
  7. python海龟图画龙珠_阿里云天池龙珠计划——Python基础入门第2课:变量和赋值...
  8. 名师在线杂志名师在线杂志社名师在线编辑部2023年第6期目录
  9. 大咖说开源|谭中意:如何构建高效/安全/合规的开源软件供应链和国际开源合规标准?...
  10. VMware-VSphere