Response.Cookies.Add等待确认?

时间:2014-01-30 09:28:20

标签: c# .net cookies

我有一个页面,我使用cookie存储令牌。

如果找到cookie,页面会加载一个方式, 如果没有,页面将被发送到验证模式。

问题是,如果找不到cookie,并且我将页面发送到auth模式,并且用户点击提交,则十次中有九次在回发时找不到cookie并且用户必须等待第二个或第二个刷新页面,此时找到cookie。

在回发之前,我可以在button_click上等待确认cookie吗?

代码

    public HttpCookie Cookie()
    {
        var cookie = new HttpCookie("testcookie");
        cookie = Request.Cookies["testcookie"];

        return cookie ?? null;
    }

    var cookie = Cookie();
    if (cookie != null)
    {
        login.Visible = false;
    }
    else
    {
        login.Visible = true;
    }

    protected void IDButton_Click(object sender, EventArgs e)
    {
        var newCookie = new HttpCookie("testcookie");
        Response.Cookies.Add(newCooke);
    }

1 个答案:

答案 0 :(得分:1)

我认为您可能遇到ASP.NET's page lifecycle问题。您正在按钮的Click事件上设置Cookie,但此时页面已经加载,并且您的显示内容未更新。

也许您可以将显示代码提取到新方法中,并在按钮的单击事件期间调用该方法。

我在下面添加了一个示例,该页面包含Literal(如果设置了Cookie,则显示“是”或“否”)以及设置它的Button;

<asp:Literal ID="LiteralCookie" runat="server" />
<asp:Button ID="ButtonSetCookie" Text="Set cookie" runat="server"
  OnClick="ButtonSetCookieClick" />

这是背后的代码;

protected void Page_Load(object sender, EventArgs e)
{
  if (!IsPostBack)
  {
    UpdateDisplayBasedOnCookie();
  }
}

public void UpdateDisplayBasedOnCookie()
{
  LiteralCookie.Text = Request.Cookies["TestCookie"] == null ? "No" : "Yes";
}

protected void ButtonSetCookieClick(object sender, EventArgs e)
{
  SetCookie();
  UpdateDisplayBasedOnCookie();
}

private void SetCookie()
{
  HttpCookie myCookie = new HttpCookie("TestCookie");
  myCookie.Values.Add("Username", "Matt");
  myCookie.Expires = DateTime.Now.AddHours(12);

  Response.Cookies.Add(myCookie);
}

通过单击按钮,Literal从“否”变为“是”,表示它在POST上找到了cookie。我希望这很清楚。

如果我能进一步提供帮助,请告诉我。

马特