网站会员登录与注册系统
网站会员登录与注册系统
实验报告
学 院: 计算机工程学院 专 业: 信息管理与信息系统 学 号: 09142102 学生姓名: 陈文华 指导教师: 余小军
完成时间: 2012.05.03
JIANGSU TEACHERS UNIVERSITY OF TECHNOLOGY
网站会员登录与注册系统实验报告
一、实验要求
网站会员登录与注册系统运用广泛,几乎所有的正规网站都需要注册会员,在进入该网站时也必须通过登录、验证操作才能使用网站中的功能。为此,设计网站会员登录与注册系统的必要性即比较突出了。在开发会员注册和会员登录时需要考虑到网络的安全问题,例如在登录时使用非法程序破解密码等等一些问题。
本次设计主要运用Visual Studio 2005开发动态网页,并辅以SQL Server 2005进行数据库的设计。本系统主要实现的功能是:会员进入某网页时会出现登录界面,如果已经注册过会员那么就可以点击立即登录直接登录网站;如果还没有注册过会员那就点击立即注册账号,转入注册会员界面,在输入必要信息之后就可以注册会员了,之后再登录网站时就可以直接登录不需要注册了。
会员注册时所填的信息将会添加到数据库“cwh”的“LoginInfo”数据表中,会员的注册信息会添加到数据库“cwh”的“LoginLog”数据表中,会员的登录信息会添加到数据库“cwh”的“EntryLog”数据表中。通过与数据库的连接才可以实现这些功能,下面将会介绍如何连接数据库。
该系统主要实现会员登录与注册的系统。实现的功能有:
1、会员登录界面。会员输入用户名,密码,验证码进入网站。
2、会员注册界面。新会员可以进入注册界面,输入一些必要的信息(用户
名必须是不一样的,即不能出现和原数据库中有的用户名)即可注册会
员,下次登录时就可输入用户名,密码,就可以立即登录了。
3、验证码。为防止用户用特定的程序暴力破解方式进行不断的登录尝试,
来破解密码。
二、设计思路
现在很多的网站都需要是会员才能使用的功能,例如在网站上下载一些资料,查看某些文章,留言等。这就需要开发人员给网站设计登录和注册功能。使用户成为会员后能使用更多的功能。
本系统主要包括两项操作,即用户登录和用户注册。运行登录页面后,如果没有注册会员可以单击“新会员注册”按钮跳转到会员注册页面,在此页面中可以先判断用户输入的会员名是否存在,如果存在,则需要重新选择会员名,如果不存在用户可以继续输入个人资料来完成注册,完成注册后添加注册日志。如果用户已经注册过,则直接输入会员名、密码和验证码,单击“登录”按钮进行登录。在单击“登录”按钮时,系统首先判断用户输入的验证码是否正确,如果正确,再判断用户输入的会员名和密码是否正确,都正确后登录成功。会员注册与登录系统的业务流程图如图2-1所示。
图2-1 会员注册与登录系统业务流程图
本系统主要实现会员注册以及登录功能。(1)、注册系统:会员注册界面包括会员登录名、真实姓名、Email、地址等“text单行文本框”,密码、确认密码“password密码框”,性别“radio单选按钮”,注册“submit提交按钮”,取消“reset重置按钮”等。(2)、会员登录界面包括会员名“text单行文本框”,密码“password密码框”,验证码“text单行文本框”,登录按钮,验证码,以及跳转到注册界面的注册按钮。
三、数据库设计
利用SQL Server 2005数据库,建立一个名为“cwh”的数据库,并创建三个表,分别为会员基本资料表—“LoginInfo”,会员注册表—“LoginLog”,会员登录表—“EntryLog”。
1.数据库创建过程
打开“Microsoft SQL Server 2005”,选择“企业管理器”,打开后展开窗口左侧“服务器”树形图,点击“数据库”,右击“数据库”—“新建数据库”,数据库命名为“cwh”。
2.数据表创建过程
(1)LoginInfo表
数据表LoginInfo用于存储后台会员名称、密码、联系方式等一系列的资料。
展开数据库“cwh”树形结构,右击“表”—“新建表”,输入列名,数据类型,长度,是否允许空等,输入完毕后关闭,出现提示框,点击“是”,输入表名称“LoginInfo”。表格如下表3-1所示。
表3-1 LoginInfo表结构
新建好“LoginInfo”表后,右击“LoginInfo”表—返回所有行,即可看到表中内容。以下列举部分会员注册信息。如下表3-2所示。
表3-2会员注册信息
(2)LoginLog表
数据表LoginLog用于会员注册日志,记录会员注册的时间。
展开数据库“cwh”树形结构,右击“表”—“新建表”,输入列名,数据类型,长度,是否允许空等,输入完毕后关闭,出现提示框,点击“是”,输入表名称“LoginLog”。表格如下表3-3所示。
表3-3 LoginLog表结构
(3)EntryLog表
数据表EntryLog用于会员登录日志,记录会员登录的时间。
展开数据库“cwh”树形结构,右击“表”—“新建表”,输入列名,数据类型,长度,是否允许空等,输入完毕后关闭,出现提示框,点击“是”,输入表名称“EntryLog”。表格如下表3-4所示。
表3-4 EntryLog表结构
四、会员注册
(一)实现关键技术
会员注册主要是将用户输入的相应信息存储到数据库中,这里使用到了连接数据库技术。使用SQLConnection对象连接数据库。将连接数据库对象封装成一个自定义方法CreateLoginConn在需要用到数据库连接时调用此方法。CreateLoginConn方法的代码如下。
Protect SqlConnection CreateLoginConn()
{
SqlConnection con=new SqlConnection(“
Data Source=localhost;Initial Catalog=cwh;”+”Intergrated Security =True;
User ID=sa;Password=09142102;”);
Return con;…………………….连接数据库cwh,用户名sa,密码09142102 }
用户在添加注册信息时需要判断一下用户输入的信息是否合法:
(1)用户名
会员名不能为空,必须是3—6个字符,只能输入字母,数字或下划线,同时要检测会员名是否已经存在。ControlToValidate属性设置为TextName,ErrorMessage1属性设置为“必须填写”。
代码如下:
*
OnClick="Button3_Click"Text="检测会员名" /> runat="server" ControlToValidate="TextName" ErrorMessage="必须填写" Font-Bold="True" Font-Size="10pt">
(2)密码:
两次输入的密码必须要一致,密码为6—16个字符,区分大小写。ControlToValidate属性设置为TextPass,ErrorMessage1属性设置为“必须填写”。
代码如下:
TextMode="Password" Width="125px"> style="color: #ff0033">*
ID="RequiredFieldValidatorPass" runat="server"
ControlToValidate="TextPass"
ErrorMessage="必须填写,"
Font-Bold="True" Font-Size="10pt">
(3)电子邮件
电子邮件不能为空和电子邮件的地址是否正确。ControlToValidate属性设置为:TextE-mail,ValidationExpression属性设置为:\w+([-+.?]\w)*@\w+([-.]\w+)*\.\ w+([-.]\w+)*
代码如下:
EnableViewState="False"> style="color: #ff0066">*
ID="RequiredFieldValidatorEmail"runat="server" ControlToValidate="TextEma" ErrorMessage="必须填写" Font-Bold="True" Font-Size="10pt">
(二)功能实现
注册页面的运行结果如图4-2-1所示。
图4-2-1 注册页面
主要操作步骤如下:
(1)创建Web窗体,命名为login.aspx。
(2)在Default窗体中添加控件。添加的主要控件及其用途如表4-2-1所示。
表4-2-1 login.aspx页面中的控件及其用途
(3)主要程序代码如下。
“检测会员名”按钮用于判断会员是否存在。在“检测会员名”按钮的Click 事件中调用自定义方法isName,判断isName方法返回的整数是否大于0,如果大于0说明数据库中已经存在用户输入的会员名,否则说明数据库中不存在该会员名,并给出相应的提示。实现代码如下:
Protected void Button3_Click(object sender,EventArgs e)
{
int i=isName();
if(i>0)
{
RegisterStartupScript(“yes”,””);
}
else
{
RegisterStartupScript(“no”,” ”) }
}
自定义方法的isName用来检测会员名并返回一个整数值(值为1会员名存在,值为0会员名不存在)。在该方法中先获取用户输入的用户名并将其赋给变量name,然后使用SQL语句。isName方法的代码如下:
protected int isName()
{
int i;
string name=TextName.Text;
if(name.Trim()!=””)
{
SqlConnection con=createLoginConn();
con.Open();
SqlCommand com=new SqlCommand(“select count(*)from loginInfo
where Name=””+name+”””,con);
con.Close();
return i=Convert.ToInt 32(com.ExecuteScalar());
}
else
return i=1;
}
自定义方法add用于将会员输入的密码使用MD5加密和其他的注册信息一起添加到数据库,如果添加成功将返回布尔值True。Add方法的代码如下:public bool add()
{
string name=TextName.Text;
string
pass=FormsAuthentication.HashPasswordForStoringInConfigFile(TextPass.T
ext,”MD5”);
string sex;
if(RadioButton1.Checked)
{
sex=”男”;
}
else
{
sex=”女”;
}
string trueName=TextTrueName.Text;
string phone=TextPhone.Text;
string address=TextAddress.Text;
string email=TextEmail.Text;
string sql=”insert into loginInfo values
(“?+id+?”,”?+name+?”,”?+pass+?”,”?+sex+?”,”?+trueName+?”,”?+phone+?”,”?+email+?”,”?+address+?”)”;
SqlConnection con=this.createLoginConn();
con.Open();
SqlConnection con=new SqlCommand(sql,con);
int i=Convert.ToInt32(com.ExecuteNonQuery());
if(i>0)
{
return true;
}
else
return false;
con.Close();
}
界面实现部分代码如下:
maxlength="50" size="15">
*
(3-16个字符,只能输入字母,数字或下划线)
checked>男
女
五、会员登录
会员登录功能主要通过判断用户输入的会员名和密码是否与数据库中的会员名和密码相等,相等则登录成功。利用验证码技术,阻止一些非法的操作。
(一)关键技术实现方法
验证码技术
所谓验证码,就是将一串随即产生的数字或符号,生成一幅图片,图中加上了一些干扰像素,由用户肉眼识别其中的验证码信息,输入表单提交到网站进行验证,验证成功后才能使用某些功能。验证码的作用是防止用户用特定程序暴力破解方式进行不断的登录尝试来破解密码。实际上用验证码是现在很多网站通过的方式,虽然登录略显麻烦,但是这个功能还是很有必要的,也很重要的。不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了验证码技术。验证码技术的具体实现代码如下所示。
protected void Page_Load(object sender, EventArgs e)
{
string checkCode=CreateRandomCode(4);
Session[“CheckCode”]=checkCode;
CreatImage(checkCode);
}
自定义方法CreateRandomCode用于产生随即字符,主要使用字符串数组存放数字和大写字母,使用随机数产生数组的下标,把字符取出放入字符串中。CreateRandomCode方法的代码如下:
private string CreateRandomCode(int codeCount)
{
string allChar=”0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,
S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z”;
string[] allCharArray=allChar.Split(…,?);
string randomCode=””;
int temp;
Random rand=new Random();
for(int i=0;i { int t=rand.Next(35); temp=t; randomCode+=allCharArray[t]; } return radomCode; } 把取出的字符串通过自定义方法CreateImage添加一些干扰元素,在CreateImage方法中绘制验证码需要使用Graphics类封装一个绘图图面、Font类定义字体字号和自行属性、Brush类定义填充图形的形状、Pen类定义用于绘制直线和曲线的对象,使用这几个类需要添加命名空间System.Drawing。 CreateImage方法的代码如下。 private void CreateImage(string checkCode) { int iwidth = (int)(checkCode.Length*10.5); Syetem.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth,20); Graphics g = Graphics.FromImage(image); Font f = new System.Drawing.Font ("Arial",10,System.Drawing.FontStyle.Bold); SolidBrush(Color.White); Brush b = new Syetem.Drawing.SolidBrush(Color.White); g.Clear(Color.Red); g.DrawString(checkCode,f,b,3,3); Pen blackPen = new pen(Color.Blue,0); Random rand = new Random(); for(int i=0;i<4;i++) { int y = rand.Next(image.Height); g.DrawLine(blackPen,0,y,iamge,Width,y); } System.IO.MemoryStream ms = new System.IO.MemoryStream(); image.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg); Response.ClearContent(); Response.ContentType="image/Jpeg"; Response.BinaryWrite(ms.ToArray()); g.Disponse(); image.Dispose(); } (二)功能实现 登录页面的运行结果如图5-2-1所示。 主要实现步骤如下: (1)创建Web窗体,命名为landing.aspx。 图5-2-1 登录页面 (2)在Default窗体中添加控件,添加的主要控件及用途如表5-2-1所示。 表5-2-1 landing.aspx页面中控件及其用途 会员登录界面部分代码如下所示: height="144">
size="22">*
*
*
(3)主要程序代码如下:
在“登录”按钮的Click事件中判断验证码、用户输入的会员名和密码是否正确,如果正确需要把当前的会员名和当前登录时间添加到登录日志数据库中。Click事件的代码如下:
protected void Button1_Click(object sender,EventArgs e)
{
SqlConnection con = new SqlConnection
(“server=.;database=login;uid=sa;pwd=;”);
if(Session["CheckCode"].ToString().Equals(TextBoxYzm.Text.ToString()))
{
try
{
con.Open();
SqlCommand com = new SqlCommand("select count(*) from
loginInfo where Name=@name and Pass=@ps",con);
com.Paremeters.Add(new
SqlParameter("@name",SqlDbType.VarChar,50));
com.Parameters["@name"].Value=TextName.Text;
com.Parameters.Add(new
SqlParameter("@ps",SqlDbType.VarChar,50));
com.Parameters["@ps"].Value=FormsAuthentication.Hash
PasswordForStoringInConfigFile(TextPass.Text,"MD5");
int i = (int)com.ExecuteScalar();
if(i>0)
{
com=new SqlCommand("insert
EntryLog values("'+TextName.Text+'","'+
DateTime.Now.ToString()+'")",con);
com.ExecuteNonQuery();
con.Close;
Reponse.Redirect("index.aspx");
}
else
{
Response.Write("");
}
}
catch(Exception error)
{
Rseponse.Write(error.ToString()):
}
else
Response.Write("");
}
登陆成功后的效果如图5-2-2所示。
图5-2-2 登录成功页面
在此页面的Page_Load事件中需要通过Image1控件的ImageUrl属性来绑定验证码。Page_Load事件的代码如下:
protect void Page_Load(object sender,EventArgs e)
{
if(!IsPostBack)
{
this.Image1.ImageUrl=”VallidateCode.aspx”;
}
}
为了防止验证码看不清,需要在验证码后面添加LinkButton控件,重新绑定一下Image控件的ImageURL属性。LinkButton2控件的Click事件响应代码如下。
protect void Page_Load(object sender,EventArgs e)
{
this.Image1.ImageUrl=”VallidateCode.aspx”;
}
六、总结
本系统主要涉及两个技术,即用户登录和用户注册技术。虽然只有两个看似简单的技术,但对于初学者的我来说,在试验过程还是碰到许多的难题,当然在一次次的失败中也获得了很多的经验教训。先将试验的心得总结如下:
一、前台网页与数据库的连接:
由于刚开始没有注意在数据库连接语句中加入“usingSystem.Data.SqlClient”该条语句,导致连接数据库时出现错误。经过改正后,能从前台看到数据库中的会员信息了。
二、控件信息的获取:
由于没有学过相关的控件知识,做到这步还是有点困惑的。在通过上网查阅资料,以及询问同学之后,了解到,其实和以前学过的eclipse开发类似,都是通过封装技术“即所谓的get,set”。
三、验证码技术:
显然,验证码技术也没有学过,这部分还是比较难以下手的。通过上网查阅资料,还是一知半解,不得已,寻求了学长的帮助,在同学的帮助之下,完成了该部分的内容,虽然现在还是不能自己做到,但是相信在以后的自学能自己完成,哪怕比较拙劣。
四、页面设计:
作为女孩子的我,比较热心与做界面的美化设计,虽然比较浪费时间,但是我觉得还是很有必要的。营销学上学过,一个网站的好坏,很大部分反映在界面的设计上。不管网站功能有多么的强大,页面不够美观的话,我相信一定不会有很多人感兴趣,“第一映像”还是很重要的。一个过于“朴素”的界面,你会去关心它吗?当然,界面的美观是重要的一部分,网站的功能也是很重要的。我在这方面还是比较欠缺技术的。相信在以后的学习过程,能加强这两方面的技术,在实现功能的基础上加以美化,在美化的前提下,获得强大功能!
总之,整个系统的设计过程还是充满着乐趣的。很好的锻炼了自学能力,也