簡體   English   中英

Cookie在ASP.net中失去價值

[英]Cookie loses value in ASP.net

我有以下代碼設置cookie:

  string locale = ((DropDownList)this.LoginUser.FindControl("locale")).SelectedValue;
  HttpCookie cookie = new HttpCookie("localization",locale);
  cookie.Expires= DateTime.Now.AddYears(1);
  Response.Cookies.Set(cookie);

但是,當我嘗試讀取cookie時,Value為Null。 cookie存在。 如果檢查我永遠不會超過以下:

         if (Request.Cookies["localization"] != null && !string.IsNullOrEmpty(Request.Cookies["localization"].Value))

救命?

檢查是在回復后完成的嗎? 如果是這樣,您應該從Request集合中讀取cookie。

通過將cookie添加到Response.Cookies並將其從Request.Cookies讀回來將cookie保留到瀏覽器。

添加到Response的cookie只有在頁面位於同一請求時才能讀取。

最有可能的答案可以在這篇文章中找到

當您嘗試使用Response對象而不是Reqest檢查cookie的存在時,ASP.net會自動創建一個cookie。

編輯:作為一個注釋,我最終編寫的軟件需要檢查ASP.NET是否因為他們的cookie API而成為一場噩夢。 我最終編寫了一個轉換過程,該過程從請求中獲取cookie並生成我的狀態對象。 在請求結束時,我將我的狀態對象轉換回cookie並將其填充到響應中(如果需要)。 這減輕了試圖找出cookie是否在響應中,更新它們,避免創建無意義的cookie等。

你厭倦了“請求”集合而不是“響應”集合嗎?

if (Request.Cookies["localization"] != null && !string.IsNullOrEmpty(Request.Cookies["localization"].Value))

我想我知道答案。

只需刪除<form>標記中的action屬性即可。

使它看起來像這樣: <form id="form1" runat="server">

而不是: <form id="form1" action="DisplayName.aspx" runat="server">

然后,您應該使用Response.Redirect("DisplayName.aspx"); 在你的代碼中。

將此添加為對Chris Marisic的答案的評論,但我沒有那個privelage :-(

繼Chris在編輯中從請求中刪除cookie時所說的,為了能夠在回發中讀取新創建的cookie值,我最終做了

Private Sub SetPageSize(ByVal pageSize As Integer)

    ' Set cookie value to pageSize
    Dim pageSizeCookie As HttpCookie = New HttpCookie(pageSizeCookieName)
    With pageSizeCookie
        .Expires = Now.AddYears(100)
        .Value = pageSize.ToString
    End With

    ' Add to response to save it
    Me.Response.Cookies.Add(pageSizeCookie)

    ' Add to request so available for postback
    Me.Request.Cookies.Remove(pageSizeCookieName)
    Me.Request.Cookies.Add(pageSizeCookie)

End Sub

Request.Cookies.Remove和Request.Cookies.Add行使其適用於回發

試試這個片段 -

string locale = ((DropDownList)this.LoginUser.FindControl("locale"))
                                                    .SelectedValue;  
HttpCookie myCookie = new HttpCookie("localization");
Response.Cookies.Add(myCookie);
myCookie.Values.Add("locale", locale);
Response.Cookies["localization"].Expires = DateTime.Now.AddYears(1);

讀它 -

if (Request.Cookies["localization"] != null)
{
   HttpCookie cookie = Request.Cookies["localization"];
   string locale = cookie.Values["locale"].ToString();
}

如果您在調試模式下進行編譯,請打開相關頁面的跟蹤並確保cookie位於請求集合中。 在aspx文件中的@page指令中設置跟蹤。

我有類似的問題,我無法在回發時讀取cookie。 對我來說問題是我檢查了cookie的Secure屬性為true。 據說,當打開cookie的Secure屬性時,只有在連接使用安全套接字層時才會傳輸cookie。 但是,我不確定我是如何第一次在瀏覽器中看到cookie,而不是回發,因為我沒有通過SSL進行傳輸。 無論如何,將cookie.Secure轉為false,解決了問題,並在回發時讀取了cookie。

對不起,如果這不需要對你的問題做任何事情,我想分享這個,因為我花了一些時間看看如何解決這個問題。

使用Response.Cookies.Add(cookie); 而不是Response.Cookies.Set(cookie);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM