输入新的cookie以保存(也了解cookie)

时间:2014-01-31 02:40:05

标签: c# asp.net cookies

现在我已经制作了一份登记表。我希望用户输入他们的名字并将其另存为cookie。当他们重新加载网站时,他们的信息仍然会出现。正如我目前所编写的那样。但是,如果有人想输入新信息,则必须单击我的清除按钮。无论如何我可以拥有它,如果用户只是键入一个新名称,它将自动保存该cookie并使用键入的最新cookie。这是我的一些代码

另外,为了更具体一点,我想要它可以输入名称,注册,重新加载页面并显示名称,但是如果他们在该名称上键入新名称并注册,将出现新名称。现在他们必须在点击注册之前点击清除。

protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.Cookies["FirstName"] != null)
        {
            TextBox1.Text = Request.Cookies["FirstName"].Value;
        }
protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Cookies["FirstName"].Value = TextBox1.Text;
        Response.Cookies["FirstName"].Expires = DateTime.Now.AddDays(30);
    }

然后,我让他们输入新信息的方式是清除按钮(我不想要)

protected void Button2_Click(object sender, EventArgs e)
    {
        DeleteCookie();
    }
    private void DeleteCookie()
    {
        HttpCookie cookie = new HttpCookie("FirstName");
        cookie.Expires = DateTime.Now.AddSeconds(-1);
        Response.Cookies.Add(cookie);
        TextBox1.Text = "";
    }

2 个答案:

答案 0 :(得分:1)

您似乎没有包含所有相关代码(因为您甚至没有将Cookie添加到响应中),但是根据您发布的内容,您的问题似乎是不理解{{3} }。

当他们点击您的按钮时,Page_Load事件将首先运行(Button1_Click之前)。所以这意味着当cookie存在时,他们键入的内容会被cookie值覆盖......所以是的,他们永远不能设置新值,直到cookie被删除。

所以只需在{em>不回帖后设置TextBox1的值来解决此问题:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack && Request.Cookies["FirstName"] != null)
    {
        TextBox1.Text = Request.Cookies["FirstName"].Value;
    }
}

您的按钮点击应该更像:

protected void Button1_Click(object sender, EventArgs e)
{
    HttpCookie c = Request.Cookies["FirstName"];
    if (c == null)
    {
        c = new HttpCookie("FirstName");
    }

    c.Value = TextBox1.Text;
    c.Expires = DateTime.Now.AddDays(30);
    Response.Cookies.Add(c);
}

要实现的另一个好处是cookie不能真正被信任,因为它们可以由用户编辑。像ASP.NET Lifecycle这样的东西有帮助(安全的cookie - 通过HTTPS - 甚至更好,但是你只能通过HTTPS读取cookie,这可能会有问题,除非你的整个网站都是安全的),但对于我喜欢的敏感信息加密数据......你不希望有人将cookie中的名称更改为“Admin”,然后自由统治你的网站(假设你正在处理安全性)。

答案 1 :(得分:0)

您可以使用TextChange事件。 http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.textbox.textchanged(v=vs.110).aspx

尝试:

<asp:TextBox runat="server" id="TextBox1" OnTextChanged="TextBox1_TextChanged" />


protected void TextBox1_TextChanged(object sender, EventArgs e)
{
   DeleteCookie();
}

我从未发现TextChanged事件对最终用户非常直观,因为您仍然需要一种方法让最终用户触发回发以触发事件。

有许多方法可以让它们触发回发,例如OnBlur,按Enter,单击按钮。这一切都取决于您希望用户体验的内容。

如果它是我的用户界面,那么我可能会有一个隐藏的保存按钮,当他们开始通过jQuery(或Javascript)键入TextBox时显示,当他们完成输入时,他们点击保存按钮来触发事件。