5.3 实验指导——用户的安全登录和退出
一般情况下,开发者可以使用Session保存一些比较敏感的数据,例如登录账户名和登录密码。本节模拟实现用户的安全登录和退出功能,步骤如下。
(1)创建名称为UserInfo的实体类,该类包含loginName和loginPass两个字段,通过属性对这两个字段进行封装。代码如下。
public class UserInfo { public UserInfo() { } private string loginName; public string LoginName { get { return loginName; } set { loginName = value; } } private string loginPass; public string LoginPass { get { return loginPass; } set { loginPass = value; } } }
(2)创建Login.aspx窗体页,向该页面的表单中添加【登录名】输入框、【登录密码】框和【登录】按钮。代码如下。
<table align="center" height="100" width="100%"> <tr><td align="right">登录名:</td><td><asp:TextBox ID="txtLoginName" runat="server"></asp:TextBox></td></tr> <tr><td align="right">登录密码:</td><td><asp:TextBox ID="txtLoginPass" TextMode="Password" runat="server"></asp:TextBox></td></tr> <tr><td></td><td><asp:Button ID="btnLogin"runat="server"Text="登 录 " OnClick="btnLogin_Click" /></td></tr> </table>
(3)在后台页面为步骤(2)中的Button控件添加Click事件代码,首先获取用户输入的登录名和登录密码,接着将登录名和密码赋值为UserInfo的实例对象,然后通过Session保存user对象,最后通过Response对象的Redirect()方法跳转页面。代码如下。
UserInfo user = new UserInfo(); protected void btnLogin_Click(object sender, EventArgs e) { string name = txtLoginName.Text; //获取登录名 string pass = txtLoginPass.Text; //获取登录密码 user.LoginName = name; user.LoginPass = pass; Session["user"] = user; Response.Redirect("Default.aspx"); }
(4)创建Default.aspx页面,向该页面添加一个Label控件和一个LinkButton控件,前者用于显示登录名和登录密码,后者指定一个【退出】按钮。代码如下。
<asp:Label ID="lblMessage" runat="server" Font-Size="Larger" ForeColor="Red"> </asp:Label> <asp:LinkButton ID="lbtnExit" runat="server" Text="退 出" OnClick= "lbtnExit_Click"></asp:LinkButton>
(5)在后台页面为步骤(4)中的【退出】按钮添加Click事件代码。
protected void lbtnExit_Click(object sender, EventArgs e) { Session.Abandon(); //取消当前会话 Session.Remove("user"); //删除user会话对象 if (Session["user"] == null) { Response.Write("<script>alert(’您已经成功退出,请到登录页进行登录 '); window.location.href='Login.aspx'; </script>"); } }
在上述代码中,首先调用Session对象的Abandon()方法取消当前会话,然后调用Remove()方法删除user会话对象,最后通过if语句判断Session中保存的user对象是否为空,如果为空,则调用Response对象的Write()方法弹出提示并跳转页面。
(6)在Defalut.aspx窗体页面的后台Load事件中添加代码。在该事件中判断获取到的user对象是否为空,如果为空则跳转页面;否则通过as将取出的内容转换为UserInfo对象,再将获取到的内容显示到Label控件中。代码如下。
protected void Page_Load(object sender, EventArgs e) { if (Session["user"] == null) { Response.Write("<script>alert(’您可能没有登录,找不到您的信息,单击按 钮跳转到登录页面。'); window.location.href='Login.aspx'; </script>"); } else { UserInfo user = Session["user"] as UserInfo; lblMessage.Text = "您的登录名是:" + user.LoginName + ", 登录密码是: " + user.LoginPass; } }
(7)直接运行Default.aspx页面查看效果,由于首次运行没有获取到Session中保存的user对象,因此会弹出对话框提示,如图5-5所示。单击【确定】按钮跳转到登录页面,如图5-6所示。
图5-5 提示登录
图5-6 登录页面
(8)在如图5-6所示界面中输入登录名和登录密码,然后单击【登录】按钮,如图5-7所示。
图5-7 用户登录成功时的页面
(9)打开一个新的窗口,直接在地址栏中输入Default.aspx页面的地址进行访问,如图5-8所示。这时可以发现,程序已经检测到Session中的user对象,而不再提示用户重新登录。
图5-8 打开另一个窗口
(10)单击图5-8中的【退出】按钮,然后直接刷新或重新访问Default.aspx页面,效果图不再显示。