建立良好体验度的Web注册系统
*项目名称:具有良好体验度的Web注册系统
*作者:草履虫
*联系:caolvchong@gmail.com
*时间:2007-6-29
*起因和版权说明:
1.蓝色理想上有位会员发布了个类似的系统,提问说验证码不支持firefox的刷新,于是萌生念头做一个.本系统外观(按钮取色等)借鉴了该系统,但细节实现原理并不相同(该文地址:http://bbs.blueidea.com/thread-2761325-1-4.html).
2.另外,自己做的这个注册系统中利用了网络上的无组件验证码(作者sipo)
3.至于密码强度的算法借鉴了蓝色理想的一篇文章(http://www.blueidea.com/tech/web/2006/4324.asp),但该算法并不十分理想,如果有更好算法的朋友不妨交流一下
*特点和知识点:
1.AJAX验证用户名和验证码,同时异步进行用户名注册(都属于AJAX的很基础部分)
2.支持验证码刷新(包括firefox平台下)
3.密码,邮箱,用户名等即时检测(利用javascript DOM)
4.HTML通过W3C Strict验证,CSS也通过W3C CSS验证(其实这个有点多余,并不完全必要)
*开发平台:Windows2003 IIS6.0 Access数据库
*工具:DreamWeaver(写ASP),Aptana(写Javascript,HTML和CSS),Emeditor(写这篇文章),Access2003(数据库)
*测试平台:Firefox2.0,Opera9.21,IE6.0,IE7.0
*演示地址:http://finish.3322.org/reg/reg.htm(短期有效,在本机上,可能访问不顺畅)
*原文地址:http://cceer.xmu.edu.cn/blog/view.asp?id=52
*补充:
如果你使用这个注册系统,请务必注意下列问题:
本系统没有对密码进行加密,如果需要,可以搜索MD5加密
本系统没有进行防注入设置,如果需要,可以搜索SQL防注入
限于本人水平上的限制,错误和不足在所难免,如果你有问题或者建议,请联系我,感谢!
*这里是效果图
*这里是所有文件的打包下载(包括所有文件,图片,数据库等,解压后请在IIS下测试)
良好体验度的注册系统.rar
限于文章长度的限制,只帖出两个js文件和一个显示注册页面,至于后台处理页面以及css文件等,请在压缩包中查看
1.reg.htm(由于BLOG会过滤,分开三个部分写)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="gb2312">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB2312" />
<title>草履虫---简易AJAX注册页面</title>
<link href="reg.css" type="text/css" rel="stylesheet" />
<script src="detect.js" type="text/javascript"></script>
<script src="ajax.js" type="text/javascript"></script>
</head>
<body οnlοad="check_data();">
- <UL>
- <LI id=title>草履虫---Web注册系统
- <LI class=underline>
- <LABEL>注册用户名:
- <INPUT onblur=check_id(this.value); maxLength=16>
- </LABEL>
- <SPAN>支持汉字,单词,数字,敏感字符屏蔽</SPAN>
- <LI>
- <LABEL>注册密码:
- <INPUT onblur=check_password(); type=password value="">
- </LABEL>
- <SPAN>密码在6-16位之间,敏感字符屏蔽</SPAN>
- <LI class=underline>
- <LABEL>重复密码:
- <INPUT onblur=check_pw(); type=password maxLength=16 value="">
- </LABEL>
- <SPAN></SPAN>
- <LI class=underline>
- <LABEL>邮箱:
- <INPUT onblur=check_email(this.value)>
- </LABEL>
- <SPAN>email是联系重要手段</SPAN>
- <LI class=underline>验证码:
- <INPUT onblur=checkcode(this.value); maxLength=5>
- <LABEL>
- <IMG id=src onclick="this.src=this.src+'?'+Math.random();" height=18 alt=看不清楚?请点击刷新 src="getcode.asp">
- <SPAN>看不清楚?请点击验证码刷新</SPAN>
- </LABEL>
- <LI class=underline>
- 相关协议:
- <LABEL onclick=accept_info();><INPUT type=radio name=info>接受</LABEL>
- <LABEL onclick=refuse_info();><INPUT type=radio name=info>不接受</LABEL>
- <INPUT class=button type=button value=阅读协议>
- <LI class=underline>
- <INPUT class="button setleft" onclick="sendinfo($('input')[0].value,$('input')[1].value,$('input')[3].value)" type=submit value=注册>
- <INPUT class=button onclick=reset_info() type=reset value=重置>
- <SPAN></SPAN>
- <LI class=copyright>作者:草履虫
- <LI class=copyright>时间:2007-6-28
- <LI class=copyright>联系:caolvchong@gmail.com
- <LI class=copyright>Blog---Web2.0之路:<A href="http://cceer.xmu.edu.cn/blog/">http://cceer.xmu.edu.cn/blog/</A>
- /LI></UL>
- 草履虫---Web注册系统
- 注册用户名: 支持汉字,单词,数字,敏感字符屏蔽
- 注册密码: 密码在6-16位之间,敏感字符屏蔽
- 重复密码:
- 邮箱: email是联系重要手段
- 验证码: 看不清楚?请点击验证码刷新
- 相关协议: 接受 不接受
- 作者:草履虫
- 时间:2007-6-28
- 联系:caolvchong@gmail.com
- Blog---Web2.0之路:http://cceer.xmu.edu.cn/blog/
</body>
</html>
2.detect.js
- var flag=[0,0,0,0,0,0];
- var $=function(tagName){
- return document.getElementsByTagName(tagName);
- }
- //----------接受协议
- function accept_info(){
- flag[0]=1;
- check_data();
- }
- //----------拒绝协议
- function refuse_info(){
- flag[0]=0;
- check_data();
- }
- //----------重置
- function reset_info(){
- var info=["支持汉字,单词,数字,敏感字符屏蔽","密码在6-16位之间,敏感字符屏蔽","","email是联系重要手段","看不清楚?请点击验证码刷新"]
- for(var i=0;i<$("span").length;i++){
- $("span")[i].innerHTML=info[i];
- flag[i]=0;
- }
- for(var i=0;i<$("input").length-3;i++){
- $("input")[i].value="";
- }
- check_data();
- }
- //----------邮箱检测
- function check_email(email){
- var reEmail=/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
- var b_email=reEmail.test(email);
- if(b_email){
- $("span")[3].innerHTML="<IMG src="yesok.gif"> 邮箱可用";
- flag[1]=1;
- check_data();
- }
- else{
- $("span")[3].innerHTML="<IMG src="yesno.gif"> 邮箱错误";
- flag[1]=0;
- check_data();
- }
- }
- //----------密码检测
- function check_password(obj){
- var pwd=$("input")[1].value;
- var reChinese=/[\u0391-\uFFE5]+/;
- var b_chinese=reChinese.test(pwd);
- var reSpace=/\s+/;
- var b_space=reSpace.test(pwd);
- //-------长度测试
- if(pwd.length<6){
- $("span")[1].innerHTML="<IMG src="yesno.gif"> 密码长度不能小于6";
- flag[2]=0;
- check_data();
- }
- //-------合法性检测:不能包含汉字
- else if(b_chinese){
- $("span")[1].innerHTML="<IMG src="yesno.gif"> 密码不能包含中文";
- flag[2]=0;
- check_data();
- }
- //-------合法性检测:不能包含空格
- else if(b_space){
- $("span")[1].innerHTML="<IMG src="yesno.gif"> 密码不能包含空格";
- flag[2]=0;
- check_data();
- }
- //-------合法时显示密码强度
- else{
- //定义对应的消息提示
- var num=getResult(pwd);
- var msg=new Array("<IMG src="bad.gif"> 密码强度差","<IMG src="comm.gif"> 密码强度一般","<IMG src="good.gif"> 密码强度强壮");
- $("span")[1].innerHTML=msg[num];
- if($("input")[2].value!=""){
- check_pw();
- }
- return flag[2]=1;
- check_data();
- }
- }
- //定义检测函数,返回0/1/2分别代表差/一般/强
- function getResult(s){
- var ls =-1;
- if (s.match(/[a-z]/ig)){
- ls++;
- }
- if (s.match(/[0-9]/ig)){
- ls++;
- }
- if (s.match(/(.[^a-z0-9])/ig)){
- ls++;
- }
- return ls;
- }
- //---------密码一致性检测
- function check_pw(){
- var pwd=$("input")[1].value.toString();
- var check_pwd=$("input")[2].value.toString();
- if(flag[2]==1){
- if(pwd==check_pwd){
- $("span")[2].innerHTML="<IMG src="yesok.gif"> 密码可以使用";
- flag[3]=1;
- check_data();
- }
- else{
- $("span")[2].innerHTML="<IMG src="yesno.gif"> 两次密码不相同";
- flag[3]=0;
- check_data();
- }
- }
- }
- //---------用户名合法性检测
- function check_id(id_name){//只能字母和数字,是否相同用AJAX判断
- var reId=/^[\w\u0391-\uFFE5]+$/;
- var b_id=reId.test(id_name);
- if(!b_id){
- $("span")[0].innerHTML="<IMG src="yesno.gif"> ID命名非法";
- flag[4]=0;
- check_data();
- }
- else{//合法用户名用ajax的checkid()检测是否被注册过
- checkid(id_name);
- }
- }
- //---------检查数据,使提交按钮是否生效
- function check_data(){
- if(flag[0]==1 && flag[1]==1 && flag[2]==1 && flag[3]==1 && flag[4]==1 && flag[5]==1){
- $("input")[8].disabled=false;
- }
- else{
- $("input")[8].disabled=true;
- }
- }
- //--------------------------------------------------------------------
var flag=[0,0,0,0,0,0];var $=function(tagName){return document.getElementsByTagName(tagName);}//----------接受协议function accept_info(){flag[0]=1;check_data();}//----------拒绝协议function refuse_info(){flag[0]=0;check_data();}//----------重置function reset_info(){var info=["支持汉字,单词,数字,敏感字符屏蔽","密码在6-16位之间,敏感字符屏蔽","","email是联系重要手段","看不清楚?请点击验证码刷新"]for(var i=0;i<$("span").length;i++){$("span")[i].innerHTML=info[i];flag[i]=0;}for(var i=0;i<$("input").length-3;i++){$("input")[i].value="";}check_data();}//----------邮箱检测function check_email(email){var reEmail=/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;var b_email=reEmail.test(email);if(b_email){$("span")[3].innerHTML=" 邮箱可用";flag[1]=1;check_data();}else{$("span")[3].innerHTML=" 邮箱错误";flag[1]=0;check_data();}}//----------密码检测function check_password(obj){var pwd=$("input")[1].value;var reChinese=/[\u0391-\uFFE5]+/;var b_chinese=reChinese.test(pwd);var reSpace=/\s+/;var b_space=reSpace.test(pwd);//-------长度测试if(pwd.length<6){$("span")[1].innerHTML=" 密码长度不能小于6";flag[2]=0;check_data();}//-------合法性检测:不能包含汉字else if(b_chinese){$("span")[1].innerHTML=" 密码不能包含中文";flag[2]=0;check_data();}//-------合法性检测:不能包含空格else if(b_space){$("span")[1].innerHTML=" 密码不能包含空格";flag[2]=0;check_data();}//-------合法时显示密码强度else{//定义对应的消息提示var num=getResult(pwd);var msg=new Array(" 密码强度差"," 密码强度一般"," 密码强度强壮");$("span")[1].innerHTML=msg[num];if($("input")[2].value!=""){check_pw();}return flag[2]=1;check_data();}}//定义检测函数,返回0/1/2分别代表差/一般/强function getResult(s){var ls =-1;if (s.match(/[a-z]/ig)){ls++;}if (s.match(/[0-9]/ig)){ls++;}if (s.match(/(.[^a-z0-9])/ig)){ls++;}return ls;}//---------密码一致性检测 function check_pw(){var pwd=$("input")[1].value.toString();var check_pwd=$("input")[2].value.toString();if(flag[2]==1){if(pwd==check_pwd){$("span")[2].innerHTML=" 密码可以使用";flag[3]=1;check_data();}else{$("span")[2].innerHTML=" 两次密码不相同";flag[3]=0;check_data();}}}//---------用户名合法性检测function check_id(id_name){//只能字母和数字,是否相同用AJAX判断var reId=/^[\w\u0391-\uFFE5]+$/;var b_id=reId.test(id_name);if(!b_id){$("span")[0].innerHTML=" ID命名非法";flag[4]=0;check_data();}else{//合法用户名用ajax的checkid()检测是否被注册过checkid(id_name);}}//---------检查数据,使提交按钮是否生效function check_data(){if(flag[0]==1 && flag[1]==1 && flag[2]==1 && flag[3]==1 && flag[4]==1 && flag[5]==1){$("input")[8].disabled=false;}else{$("input")[8].disabled=true;}}//--------------------------------------------------------------------
3.ajax.js
- function checkcode(regcode){
- var xmlhttp;
- try{
- xmlhttp=new XMLHttpRequest();
- }
- catch(e){
- xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
- }
- xmlhttp.onreadystatechange=function(){
- if (xmlhttp.readyState==4){
- if (xmlhttp.status==200){
- var data=xmlhttp.responseText;
- code_result(data);
- }
- else{
- $("span")[4].innerHTML="验证码校验失败,请联系管理员";
- }
- }
- else{
- $("span")[4].innerHTML="正在进行验证码校验...";
- }
- }
- xmlhttp.open("post", "check_code.asp", true);
- xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded');
- xmlhttp.send("regcode="+escape(regcode));
- }
- function code_result(data){
- var resultbox=$("span")[4];
- if(data==1){
- resultbox.innerHTML='<IMG src="yesok.gif"> 验证码正确';
- flag[5]=1;
- check_data();
- }
- else{
- resultbox.innerHTML='<IMG src="yesno.gif"> 验证码错误';
- flag[5]=0;
- check_data();
- }
- }
- //--------------------------------------------------------------------
- function checkid(regid){
- var xmlhttp;
- try{
- xmlhttp=new XMLHttpRequest();
- }
- catch(e){
- xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
- }
- xmlhttp.onreadystatechange=function(){
- if (xmlhttp.readyState==4){
- if (xmlhttp.status==200){
- var data=xmlhttp.responseText;
- id_result(data);
- }
- else{
- $("span")[0].innerHTML="用户名检测失败,请联系管理员";
- }
- }
- else{
- $("span")[0].innerHTML="正在进行用户名校验...";
- }
- }
- xmlhttp.open("post", "check_id.asp", true);
- xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded');
- xmlhttp.send("regid="+escape(regid));
- }
- function id_result(data){
- var resultbox=$("span")[0];
- if(data==1){
- resultbox.innerHTML='<IMG src="yesok.gif"> 用户名可用';
- flag[4]=1;
- check_data();
- }
- else{
- resultbox.innerHTML='<IMG src="yesno.gif"> 该用户名已经被注册';
- flag[4]=0;
- check_data();
- }
- }
- //--------------------------------------------------------------------
- function sendinfo(regname,pwd,email){
- var xmlhttp;
- try{
- xmlhttp=new XMLHttpRequest();
- }
- catch(e){
- xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
- }
- xmlhttp.onreadystatechange=function(){
- if (xmlhttp.readyState==4){
- if (xmlhttp.status==200){
- var data=xmlhttp.responseText;
- reg_result(data);
- }
- else{
- $("span")[5].innerHTML="注册失败,请联系管理员";
- }
- }
- else{
- $("span")[5].innerHTML="正在进行用户名注册...";
- }
- }
- xmlhttp.open("post", "reg.asp", true);
- xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded');
- xmlhttp.send("regname="+escape(regname)+"&pwd="+escape(pwd)+"&email="+escape(email));
- }
- function reg_result(data){
- if(data==1){
- $("span")[5].innerHTML='<A href="http://cceer.xmu.edu.cn/blog/" target=_blank>'+$("input")[0].value+",您好.请点击这里登陆</A>";
- }
- else{
- $("span")[5].innerHTML="注册失败,请联系管理员";
- }
- }
function checkcode(regcode){ var xmlhttp;try{xmlhttp=new XMLHttpRequest();}catch(e){xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}xmlhttp.onreadystatechange=function(){if (xmlhttp.readyState==4){if (xmlhttp.status==200){var data=xmlhttp.responseText;code_result(data);}else{$("span")[4].innerHTML="验证码校验失败,请联系管理员";}}else{$("span")[4].innerHTML="正在进行验证码校验...";}}xmlhttp.open("post", "check_code.asp", true);xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded');xmlhttp.send("regcode="+escape(regcode)); } function code_result(data){var resultbox=$("span")[4];if(data==1){resultbox.innerHTML=' 验证码正确';flag[5]=1;check_data();}else{resultbox.innerHTML=' 验证码错误';flag[5]=0;check_data();} }//-------------------------------------------------------------------- function checkid(regid){ var xmlhttp;try{xmlhttp=new XMLHttpRequest();}catch(e){xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}xmlhttp.onreadystatechange=function(){if (xmlhttp.readyState==4){if (xmlhttp.status==200){var data=xmlhttp.responseText;id_result(data);}else{$("span")[0].innerHTML="用户名检测失败,请联系管理员";}}else{$("span")[0].innerHTML="正在进行用户名校验...";}}xmlhttp.open("post", "check_id.asp", true);xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded');xmlhttp.send("regid="+escape(regid)); } function id_result(data){var resultbox=$("span")[0];if(data==1){resultbox.innerHTML=' 用户名可用';flag[4]=1;check_data();}else{resultbox.innerHTML=' 该用户名已经被注册';flag[4]=0;check_data();} }//-------------------------------------------------------------------- function sendinfo(regname,pwd,email){var xmlhttp;try{xmlhttp=new XMLHttpRequest();}catch(e){xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}xmlhttp.onreadystatechange=function(){if (xmlhttp.readyState==4){if (xmlhttp.status==200){var data=xmlhttp.responseText;reg_result(data);}else{$("span")[5].innerHTML="注册失败,请联系管理员";}}else{$("span")[5].innerHTML="正在进行用户名注册...";}}xmlhttp.open("post", "reg.asp", true);xmlhttp.setRequestHeader('Content-type','application/x-www-form-urlencoded');xmlhttp.send("regname="+escape(regname)+"&pwd="+escape(pwd)+"&email="+escape(email)); } function reg_result(data){if(data==1){$("span")[5].innerHTML=''+$("input")[0].value+",您好.请点击这里登陆";}else{$("span")[5].innerHTML="注册失败,请联系管理员";}}
建立良好体验度的Web注册系统相关推荐
- java注册登录客户端_GitHub - a-voyager/LoginSystem_Client: 登录注册系统(桌面客户端)——Java课程实践...
基于HTTP协议和MySQL的多平台登录注册系统 摘要 基于HTTP协议和MySQL的多平台登录注册系统主要用于模拟演示互联网中常见的BS/CS模式登录注册系统.目前网络互访一般基于两种协议HTTP协 ...
- 虚拟现实技术利用计算机,虚拟现实 虚拟现实技术是一种可以创建和体验虚拟世界的计算机仿真系统它利用计算机生...
虚拟现实 虚拟现实技术是一种可以创建和体验虚拟世界的计算机仿真系统它利用计算机生成一种模拟环境是一种多源信息融合的交互式的三维动态视景和实体行为的系统仿真使用户沉浸到该环境中. 中文名 虚拟现实,灵境 ...
- 【php】注册系统和使用Xajax即时验证用户名是否被占用
在php中使用Xajax能够即时与数据库发生交互' 带给用户更好的体验 主要的应用有网页的即时.不刷新的登录系统 也可以利用于注册系统中 即时验证用户名是否被占用 一.基本目标 首先在mysql中有一 ...
- 播放器技术演进与探索,Web开播系统的技术演进,大屏终端音视频播放,音视频效果插件开放平台建设...
播放器技术演进与探索 Topic <QPlayer2播放器-用扩展性支撑起未来需求> 陈军奇 七牛云 资深开发工程师.播放器负责人 随着这些年音视频的应用场景越来越丰富,用户对于播放器能 ...
- 提高搜索引擎排名、提升用户体验度
当站长在搜索引擎中输入自己的关键字,会查询到成千上万的信息,因此关键字在搜索引擎排名中变得日益重要.假设网站的一个页面出现在搜索结果的前几页中,大多数人不会花时间翻页查询,通常会打开搜索结果第一页中的 ...
- java服务器登录系统,JavaWeb入门登陆注册系统
JavaWeb入门先从登陆注册系统开始作起. 个人这个入门教程特别简单你们按步骤作就行必定没有问题的!源码在下面一个字很多你们认真仔细学 一.须要预先了解的几个基本概念,JSP文件和HTML文件还有X ...
- (附源码)计算机毕业设计SSM用户体验的线上租房系统
项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...
- 计算机毕设Python+Vue用户体验的线上租房系统(程序+LW+部署)
项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...
- 群晖 建立文件禁止访问_在设计系统中建立可访问性
群晖 建立文件禁止访问 Imagine going about your online activity - paying bills through your bank, buying ticket ...
最新文章
- ArduinoYun快速入门教程第1章ArduinoYun概览
- docker: 解决centos7下cgroup.procs: no such device的错误
- HTTP代理神器Fidder
- Linux split命令:拆分大的tar压缩包然后解压
- 转载---设计模式分类
- python如何在所有线程结束后执行最后操作_Python线程的生命周期
- Pytorch:数据并行和模型并行,解决训练过程中内存分配不均衡的问题
- 10个实用的 ES6 方法
- 信息系统项目的应急预案方案_从环评到验收、排污许可证、应急预案,都应在项目什么阶段开展? 先后顺序是什么?...
- 2019工作榜单 | Python程序员吸金榜,AI排第一,这个我服!
- 银联支付退款 php,PHP 银联支付
- 计算机网络课制作双绞线实验,计算机网络实验一(双绞线的制作)
- 如何注册域名的详细图文过程分享
- 图像翻译/Transformer:ITTR: Unpaired Image-to-Image Translation with Transformers用Transfor进行非配对图像对图像的转换
- 一个骨灰级玩家的游戏加速器使用心得分享
- C/C++百题打卡[3/100]——约瑟夫问题
- 腾讯安全与锐捷网络战略合作,威胁情报能力“被集成”
- 泰斗破坏神(一)登陆界面的制作
- 30岁HR转行软件测试,3个月学习斩获12.8K车联网公司offer
- 20秒的业务优化到底有多必要?看完你就懂了