我一辈子都无法理解我在这里做错了什么。我已经搜索了高低,但我尝试的所有内容似乎都没有解决。
我正在尝试创建一个存储用户名字和姓氏的cookie。如果用户返回并更改了第一个或第二个名称,则应在用户名 cookie 中修改这些子项。这部分似乎不起作用?
protected void btnContinue_Click(object sender, EventArgs e)
{
if (IsValid)
{
HttpCookie cookie = new HttpCookie("userName");
if (cookie != null)
{
Response.Cookies.Remove("userName");
cookie.Values["firstName"] = txtFirstName.Text;
cookie.Values["lastName"] = txtLastName.Text;
}
else
{
cookie.Values["firstName"] = txtFirstName.Text;
cookie.Values["lastName"] = txtLastName.Text;
}
cookie.Expires = DateTime.Now.AddMinutes(5);
Response.Cookies.Add(cookie);
}
Response.Redirect("~/Order.aspx");
}
在客户端浏览器上delete
cookie 的方法是override
它们,将expires
值设置为过去的日期。
使用此代码时:
Response.Cookies.Remove("userName");
您只删除服务器上的 cookie,这意味着它不会发送到客户端。这意味着客户端上的旧 cookie 将被保留。
要删除旧 Cookie:
HttpCookie cookie = new HttpCookie("olduserName");
cookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(cookie);
这里'oldusername'
包含以前的值'username'
。
编辑:
另一种方法是使用永远不会更改的名称命名您的cookie,然后您可以在用户名更改时简单地用新值覆盖它。
编辑2:
我实际上犯了和你一样的错误,你应该使用:
Response.Cookies.Set(cookie);
使用Add
时,可以有多个同名的 Cookie。这很可能是你的问题(对不起,我以前没有看到(。
编辑2:
现在刚看到这行:
Response.Redirect("~/Order.aspx");
您正在重定向!然后,不会在客户端上设置 Cookie。
相反,您应该将 cookie 设置为"~/Order.aspx"。