【ASP.NET】Cookie·登录记录示例

前言

这是对前面学的知识写的一个练习【ASP.NET】Cookie·初识

效果

在这里插入图片描述

流程图

在这里插入图片描述

源码

  • Login源
<body>
    <form id="form1" runat="server">
        <div id="div_main">
            <h3 style="text-align: center; padding: 10px; border-bottom: 1px dotted silver;">登录界面</h3>
            <p><span>请输入您的姓名:</span><asp:TextBox ID="txtname" runat="server"></asp:TextBox></p>
            <p style="text-align:center; padding:10px;border-top:1px dotted silver">
            <asp:Button ID="btnLogin" runat="server" Text="登录页面" OnClick="btnLogin_Click" />
                </p>
        </div>
    </form>
</body>
  • login代码
 protected void Page_Load(object sender, EventArgs e)
        {
            //因为我们用response.redirect跳转,页面会往返,所以如果不检测是否回发页面,那么每次页面刷新,都会改回textbox的值为cookie中的值,而不会记录新的用户名
            if (!IsPostBack)
            {
                //检测是否有最后登录的记录,如果有,填入最后登录用户的姓名
                if (Request.Cookies["lastLogin"] != null)
                {
                    txtname.Text = Request.Cookies["lastLogin"].Value;
                }
            }
        }

        protected void btnLogin_Click(object sender, EventArgs e)
        {
            //如果填写姓名,则登录
            if (txtname.Text != "")
            {
                string name = txtname.Text;
                //声明创建Cookie对象
                HttpCookie ck = new HttpCookie("lastLogin", name);
                //设置过期时间:永不过期
                ck.Expires = DateTime.MaxValue;
                //写入客户端
                Response.Cookies.Add(ck);

                string url = "Main.aspx?name=" + txtname.Text;
                //将请求重定位到url
                Response.Redirect(url);


            }
        }
  • Main源
<body>
    <form id="form1" runat="server">
        <div id="div_main">
            <div style="text-align: left; margin: 15px; padding: 10px; border-bottom: 1px dotted silver;">
                欢迎文字颜色
                <asp:DropDownList ID="ddlcolor" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlcolor_SelectedIndexChanged">
                    <asp:ListItem Value="black">默认颜色</asp:ListItem>
                    <asp:ListItem Value="red">红色</asp:ListItem>
                    <asp:ListItem Value="green">绿色</asp:ListItem>
                    <asp:ListItem Value="blue">蓝色</asp:ListItem>
                </asp:DropDownList>
                <br />
                <br />
                元素排列方式
                <asp:DropDownList ID="ddlorder" runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddlorder_SelectedIndexChanged">
                    <asp:ListItem Value="order1">列表</asp:ListItem>
                    <asp:ListItem Value="order2">详细</asp:ListItem>
                </asp:DropDownList>
                <br />
                <br />
                <asp:Button ID="btnremember" runat="server" Text="记住我的选择" OnClick="btnremember_Click" />
                <asp:Button ID="btnloginOut" runat="server" Text="退出登录" OnClick="btnloginOut_Click" />
            </div>

            <div>
                <asp:Label ID="lblwelcome" runat="server" Text="Label"></asp:Label>
                <hr />
                <div runat="server" id="div_controls">
                    <asp:Panel ID="Panel1" runat="server">信息1</asp:Panel>
                    <asp:Panel ID="Panel2" runat="server">信息2</asp:Panel>
                    <asp:Panel ID="Panel3" runat="server">信息3</asp:Panel>
                    <asp:Panel ID="Panel4" runat="server">信息4</asp:Panel>
                    <asp:Panel ID="Panel5" runat="server">信息5</asp:Panel>
                    <asp:Panel ID="Panel6" runat="server">信息6</asp:Panel>
                    <div style="clear: both"></div>
                </div>
            </div>
            </div>
    </form>
</body>
  • Main代码
protected void Page_Load(object sender, EventArgs e)
        {
            //如果没有名字参数你就进了主页,非法访问,跳回去
            if (Request.QueryString["name"] == null)
            {
                Response.Redirect("login.aspx");
            }
            else
            {
                lblwelcome.Text = "欢迎您的到来," + Request["name"];
            }
            //非回溯页面,则进行初始设置
            if (!IsPostBack)
            {
                //判断用户是否有cookie记录
                if (Request.Cookies[Request["name"]] != null)
                {
                    //有cookie记录,读取并使用
                    HttpCookie ck = Request.Cookies[Request["name"]];
                    ddlcolor.SelectedValue = ck.Values["color"];
                    ddlorder.SelectedValue = ck.Values["order"];
                }
                //如果没有cookie记录
                else
                {
                    ddlcolor.SelectedValue = "black";
                    ddlorder.SelectedValue = "order1";
                }

                //调用控件的事件,即使没有用户的操作,来设置元素的样式
                ddlcolor_SelectedIndexChanged(sender, e);
                ddlorder_SelectedIndexChanged(sender, e);
            }

        }

        protected void ddlcolor_SelectedIndexChanged(object sender, EventArgs e)
        {
            //为欢迎文字,添加一个文字颜色的CSS样式
            lblwelcome.Style.Add("color", ddlcolor.SelectedValue);
        }

        protected void ddlorder_SelectedIndexChanged(object sender, EventArgs e)
        {
            //为所有div下的panel控件设置CSS样式,采用遍历的方法设置
            Panel pnl;
            foreach (Control ctl in div_controls.Controls)
            {
                if (ctl is Panel)
                {
                    pnl = (Panel)ctl;
                    pnl.CssClass = ddlorder.SelectedValue;
                }
            }
        }

        protected void btnremember_Click(object sender, EventArgs e)
        {
            //准备记录Cookie信息,获取3个值,主键—用户名,颜色-ddlcolor,排列方式-ddlorder
            string order = ddlorder.SelectedValue;
            string name = Request["name"];
            string color = ddlcolor.SelectedValue;

            //设置一个多值Cookie,写入硬盘
            //声明创建主键
            HttpCookie ck = new HttpCookie(name);
            //设置相关子键
            ck.Values.Add("order", order);
            ck.Values.Add("color", color);
            //设置过期时间:永不过期(你想设置别的也可以设置别的哈)
            ck.Expires = DateTime.MaxValue;
            //写入客户端
            Response.Cookies.Add(ck);

        }

        protected void btnloginOut_Click(object sender, EventArgs e)
        {
            //跳转到登录页
            Response.Redirect("login.aspx");
        }
发布了98 篇原创文章 · 获赞 35 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/guhaozhang/article/details/85281050
今日推荐