在C#中修改Cookie子项

时间:2018-10-13 20:56:06

标签: c# cookies

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

我正在尝试创建一个存储用户名字和姓氏的cookie。如果用户返回并更改了名字或名字,则应修改userName 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");
    }

1 个答案:

答案 0 :(得分:0)

在客户端浏览器上获取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,然后您可以在用户名更改时简单地用新值覆盖它。

Edit2

我实际上犯了与您相同的错误,您应该使用:

Response.Cookies.Set(cookie);

使用Add时,可能有个以上的同名Cookie。这很可能是您的问题(对不起,我之前没有看到过)。

Edit2

现在刚看到这行:

Response.Redirect("~/Order.aspx");

您正在重定向!这样就不会在客户端上设置cookie。

相反,您应该在“〜/ Order.aspx”中设置cookie。