清华电脑学堂:ASP.NET 4.5网站开发与应用实践教程
上QQ阅读APP看书,第一时间看更新

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页面,效果图不再显示。