文章目录
AOD.Net用户登录认证实验
一、实验目的
(1) 熟悉VS 2010开发环境,学会使用 VS 创建网站基本结构
(2)熟悉 HTML 服务器控件,特别是 FORM 表单服务器控件的设置
(3)掌握表单处理方法
(4)掌握服务器内置对象:Request、Response、Session 等内置对象的使用
(5)掌握 ASP.NET 日期时间类
(6)掌握在 MSSQL 2008 创建数据库、数据表,并能使用 SQL 语句进行表操作(SELECT、
INSERT、UPDATE、DELETE)
(7)掌握 Web.config 文件中变量的创建与读写
(8)掌握 ADO.NET 提供的连接式数据访问方式,了解非连接式数据访问方式
(9)掌握数据源 Web 服务器控件,数据 Web 服务器控件
二、实验环境
Windows 7、SQLServer2008、VS2010(C#)
三、实验内容
获取与表单用户名、密码后,在注册数据库中验证成功后,创建会话变量后,在myhome页面显示当前用户的私有数据;否则,提示请输入正确的用户名、密码。
四、原理实验步骤
原理:
通过服务器控件获取用户输入后,合法用户则创建相应的Session变量,并进行合适的网络重定向,并在myHome.aspx页面中显示相应的个人记录。
其中:合法用户的判断规则:未使用数据库/表时,启动静态用户名/口令验证原则;否则,通过查询MySite数据库中Users表中是否有该用户名/密码,为准。
实验步骤:
1. 通过 VS2010 创建空 ASP.NET 网站。添加 2 个 WEB 窗体:login.aspx,myhome.aspx
2. 添加新项 Visual C# Web 窗体:login.aspx。
2.1 设置窗体 Title 为:登录页
2.2 在 login.aspx 中,使用工具箱->标准:添加 3 个 Label、2 个 TextBox、2 个 Button 控件
2.3 设置控件属性
ID:Label1、Label2、Label3、txtUserName、txtPwd、btnLogin、 btnReset
设置 Label 标签的 Text 属性分别为:用户名、密码、请输入用户名密码
设置 Button 按钮的 Text 分别为:登录、重写
2.4 设置 Button 控件 Click 事件响应函数
btnLogin 的 Click 事件:
获取 TextBox 控件 txtUserName、txtPwd 的输入值(可通过对象的 属性或者 Request.form 集合获取相应的变量与变量值)检查 txtUserName、txtPwd 的值是否为合法用户,如:用户名为" 张三",密码为"1234",如果是的话,则创建 Session 变量保存 当前的登录用户名与密码,再重定向至 myhome.aspx;否则的话, 将 Label3 的 Text 属性设置为:请输入正确的用户名与密码!
btnReset 的 Click 事件:将 TextBox 控件 txtUserName、txtPwd 清空。
3. 添加新项 Visual C# Web 窗体:myhome.aspx。
3.1 设置窗体 Title 为:我的空间
3.2 在 myhome.aspx 中,使用工具箱->标准:添加 3 个 Label,1 个 Button。 3.3 设置控件属性
ID:Label1、Label2、Label3,btnLogout
设置 3 个 Label 标签的 Text 属性分别为:欢迎您来到您的空间!、空白、 空白。
设置 Button 的 Text 属性为:退出。
3.4 在myhome.aspx.cs的Page_Load响应函数中:
通过 Session 变量,验证当前用户是否已登录,如未登录则重定向至 login.aspx。
设置 Label2.Text 值为:当前用户名和密码,即 Session 中保存的用户名 和密码
设置 Label3.Text 值为:输出当前系统时间。
3.5 设置btnLogout的Click响应函数
退出当前 Session;
重定向到 login.aspx 窗体。
4.DBMS 系统熟悉与使用
4.1 SQL Server Management Studio 及其相关使用
启动 SQL Server2008 的 SQL Server Management Studio,登录成功后,右键单击数 据库附加 NetSchool 数据库(NetSchool_Data.MDF/NetSchool_Log.LDF),查看其中的 STUDENT/STUDENT_CLASS 表。
4.2 DBMS系统,用户名密码的验证
如从登录表单获取到用户名密码后,在数据库中执行:Select * From Student Where USERID=’201’ AND PASSWORD=’201’,如有返回查询结果集,则意味登录表单的用户名/密码正确。
5. 连接字符串的创建,以及 Web.config 文件的编辑
根据自己连接的数据库类型(SQL Server/Oracle/Access/ODBC 等),选择相应的数据库托管程序。具体方法为:通过在 VS2010 中的服务器资源管理器中,添加数据库连接,得到该数据库连接的 Connection String
6. 变更实验二中登录验证方式为数据库检索验证方式
请根据第七章的 ADO.NET 中的面向连接访问方式,在 login.aspx 的 btnLogin 的 Click 事件中修改代码,使得原先的静态用户名/密码验证改为,数据库 Netschool 中 Student 表中已有的用户才能够登录。
7. 使用 GridView 等控件,增强数据的显示与编辑
在 myhome.aspx 页面中,添加控件 GridView1,并根据自己对本门课程中,对数据源 服务器控件、数据绑定等掌握情况,合理地设计与编辑 GridView 控件的功能。
五、关键问题及解决方法
通过服务器控件获取用户输入后,合法用户则创建相应的Session变量,并进行合适的网络重定向,并在myHome.aspx页面中显示相应的个人记录,若是非法的用户则提示用户名或密码错误,可以选择向数据库中添加用户
六、实验结果
七、实验体会
通过对这次网络程序设计实验的学习,使我受益匪浅,获得了许多许多。通过自己动手进行实验操作,我熟悉了VS2010和SQL server2008开发环境,学会了使用VS2010等工具进行网页开发工作,使我对上课所学的知识有了更深层次的认识和理解,对于数据可和ASP.NET有了新的感悟。同时通过这次实验,我也在试验过程中发现了自身的很多不足,我会在以后尽力提高自己的不足.
附录:源代码(仅仅附上核心代码)
1.1网页login.aspx.cs或其他
public partial class login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void txtUserName_TextChanged(object sender, EventArgs e)
{
}
protected void btnLogin_Click(object sender, EventArgs e)
{
string strUserName = txtUserName.Text;
string strPsd = txtPwd.Text;
SqlConnection conn;
SqlCommand cmd;
SqlDataReader rd;
conn = new SqlConnection(@"Data Source=jf508-029;Initial Catalog=Netschool;Integrated Security=True");
conn.Open();
string sun;
sun = "select * from [NetSchool].[dbo].[STUDENT]where USERID='" + txtUserName.Text + "'and PASSWORD='" + txtPwd.Text + "'";
cmd = new SqlCommand(sun, conn);
rd = cmd.ExecuteReader();
while (rd.Read())
{
Response.Redirect("myhome.aspx");
}
if (rd.HasRows)
{
Session["name"] = strUserName;
Session["password"] = strPsd;
rd.Close();
conn.Close();
}
else
{
Label3.Text = "请输入正确的用户名密码";
}
}
protected void btnReset_Click(object sender, EventArgs e)
{
txtUserName.Text = "";
txtPwd.Text = "";
}
}
2.1网页myhome.aspx.cs或其他
public partial class myhome : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Session["name"] == null)
{
}
Label2.Text = "当前用户名和密码 " + Session["name"].Tostring() + " " + Session["password"].Tostring();
Label3.Text = "输出当前系统时间" + DateTime.Now.ToString();
}
protected void btnLogout_Click(object sender, EventArgs e)
{
SqlConnection conn;
SqlCommand cmd;
SqlDataReader rd;
conn = new SqlConnection(@"Data Source=jf508-029;Initial Catalog=Netschool;Integrated Security=True");
String cmd_test = "SELECT+FROM CLASS";
cmd = new SqlCommand(cmd_test, conn);
conn.Open();
rd = cmd.ExecuteReader();
while (rd.Read())
{
ListBMyClass.Items.Add(new ListItem(rd["CLASSID"].ToString(), rd["CLASSID"].ToString()));
}
rd.Close();
conn.Close();
}
protected void ListBMyClass_SelectedIndexChanged(object sender, EventArgs e)
{
}
}
2.3 数据库生成SQL语句[包括建库、建表语句;记录不需要]
SqlConnection conn;
SqlCommand cmd;
SqlDataReader rd;
conn = new SqlConnection(@"Data Source=jf508-029;Initial Catalog=Netschool;Integrated Security=True");
String cmd_test = "SELECT+FROM CLASS";
cmd = new SqlCommand(cmd_test, conn);
conn.Open();
rd = cmd.ExecuteReader();
while (rd.Read())
{
ListBMyClass.Items.Add(new ListItem(rd["CLASSID"].ToString(), rd["CLASSID"].ToString()));
}
rd.Close();
conn.Close();