[英]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.