2014-01-30 57 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