2014-01-30 37 views
0

我有一个页面,我正在使用cookie来存储令牌。Response.Cookies.Add等待确认?

如果找到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); 
    } 
+0

接缝的东西在你的代码错过:按钮点击,你必须在新的Cookie添加到响应 –

+0

刚添加的。这是在代码中,只是错过了复制/粘贴 – Wesley

回答

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修改为“是”,这表明它的发现在岗位上的cookie。我希望这很清楚。

请让我知道,如果我能进一步帮助,

马特

+0

看起来是正确的。我会检查代码并检查答案。 – Wesley