在 C# 中修改 cookie 子项



我一辈子都无法理解我在这里做错了什么。我已经搜索了高低,但我尝试的所有内容似乎都没有解决。

我正在尝试创建一个存储用户名字和姓氏的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");
}

在客户端浏览器上deletecookie 的方法是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"。

最新更新