【 tulaoshi.com - 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防注入
限于本人水平上的限制,错误和不足在所难免,如果你有问题或者建议,请联系我,感谢!
*这里是效果图
限于文章长度的限制,只帖出两个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 onload="check_data();"
view plaincopy to clipboardprint?
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
SPANemail是联系重要手段/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=copyrightBlog---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 view plaincopy to clipboardprint?
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.length6){
$("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=/^[wu0391-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.length6){
$("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=/^[wu0391-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 view plaincopy to clipboardprint?
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="注册失败,请联系管理员";
}
}
*这里是所有文件的打包下载(包括所有文件,图片,数据库等,解压后请在IIS下测试)
良好体验度的注册系统.rar