ASP.NET WebFrom 07 Session 记录登录信息

Posted by 古承风 on July 17, 2019

1 本文目的

  • 练习Sessin
  • 实现购物车的登陆逻辑

2 登录逻辑的实现

2.1 登录逻辑图

如下图:

我们在 ASP.NET WebForm 06 中所写的购物车项目的基础上,添加一个登录逻辑:

2.1.1 新建UserLoginWeb窗体

添加的Web窗体的代码如下:


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="UserLogin.aspx.cs" Inherits="Demo04.UserLogin" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            用户名:<asp:TextBox ID="txtUserName" runat="server"></asp:TextBox>
            <hr />
            密码:<asp:TextBox ID="txtPassword" runat="server"></asp:TextBox>
            <hr />
            <asp:Literal ID="ItaMgs" runat="server"></asp:Literal>
            <hr />
            <asp:Button ID="btnLogin" runat="server" Text="Login" OnClick="btnLogin_Click" />
        </div>
    </form>
</body>
</html>


添加完成后,项目的目录结构如下:

2.1.2 编写登录逻辑

打开UserLogin,进入设计视图,双击btnLogin,即可进入如下界面:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Demo04
{
    public partial class UserLogin : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnLogin_Click(object sender, EventArgs e)
        {
           

        }
    }
}

现在记住aspx页面中的两个输入框的ID,实现登录逻辑,在上述代码中填充btnLogin_Click方法.代码如下所示:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Demo04
{
    public partial class UserLogin : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnLogin_Click(object sender, EventArgs e)
        {
            //验证信息
            //验证用户名和密码是否正确

            if (this.txtUserName.Text.Trim() == "xiaowang" && this.txtPassword.Text.Trim() == "123456")
            {
                Session["CurrentUser"] = this.txtUserName.Text.Trim();
                Response.Redirect("Default.aspx");
            }
            else
            {
                this.ItaMgs.Text = "用户名或密码错误";
            }

        }
    }
}


在以上代码中,若用户登录通过验证,则其用户名会记录在Session.CurrentUser中,我们取值时只需用Session["CurrentUser"]即可.
完成了登录逻辑,我们在原有的两个界面中显示登录状态:

首先,在Default.aspx中:添加<asp:Literal ID="ItaMsg" runat="server"></asp:Literal>用于显示登录状态,以及 <asp:Button ID="logOut" runat="server" Text="退出系统" OnClick="logOut_Click" />用于退出系统.


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Demo04.Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:CheckBox ID="ckbProduct1" runat="server" Text="衬衣"/>
            <asp:CheckBox ID="ckbProduct2" runat="server" Text="外套"/>
            <asp:CheckBox ID="ckbProduct3" runat="server" Text="帽子"/>
            <asp:CheckBox ID="ckbProduct4" runat="server" Text="裤子"/>
            <asp:CheckBox ID="ckbProduct5" runat="server" Text="手套"/>

            <asp:Button ID="btnAddToCart" runat="server" Text="将所选商品添加到购物车" OnClick="btnAddToCart_Click" />

            <asp:Button ID="btnShowCart" runat="server" Text="显示购物车" OnClick="btnShowCart_Click" />

            <hr />

            <asp:Literal ID="ItaMsg" runat="server"></asp:Literal>

            <hr />

            <asp:Button ID="logOut" runat="server" Text="退出系统" OnClick="logOut_Click" />

        </div>
    </form>
</body>
</html>


现在,我们双击logOut,进入如下界面,并在原代码的基础上添加一些用户登录相关的新增逻辑(代码中有备注)


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Demo04
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                List<string> cart = new List<string>();

                Session["Cart"] = cart;

            }

            //用户登录新增部分

            if(Session["CurrentUser"]!=null)
            {
                this.ItaMsg.Text = "欢迎您:" + Session["CurrentUser"].ToString();
            }
            else
            {
                this.ItaMsg.Text = "您还没有登录";
            }
        }

        protected void btnAddToCart_Click(object sender, EventArgs e)
        {
            //首先判断用户是否登录
            if (Session["CurrentUser"] == null)
            {
                Response.Redirect("UserLogin.aspx");
            }


            foreach(Control item in form1.Controls)
            {
                if(item is CheckBox)
                {
                    CheckBox ckd = (CheckBox)item;

                    if(ckd.Checked)
                    {
                        ((List<string>)Session["cart"]).Add(ckd.Text);
                    }
                }
            }

            this.btnAddToCart.Text = "添加成功";
        }

        protected void btnShowCart_Click(object sender, EventArgs e)
        {
            Response.Redirect("ShoppingCart.aspx");
        }

        protected void logOut_Click(object sender, EventArgs e)
        {
            //用户登录新增部分
            Session.Abandon();//清除Session
            this.ItaMsg.Text = "您还没有登录";
        }
    }
}

在上述代码中,在方法page_Load中,if(Session["CurrentUser"]!=null)极其方法体中的内容作为显示用户登录状态的逻辑.
同时,在添加购物车按钮的方法体中,添加了重定向逻辑,若用户登录未通过验证则重定向到登录界面

对退出按钮,也做出了逻辑实现,只需要调用Session.Abandon()方法,即可实现