前言
这是对前面学的知识写的一个练习【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");
}