C# Cookie在ASP.net中失去价值
我有以下设置cookie的代码:C# Cookie在ASP.net中失去价值,c#,asp.net,cookies,C#,Asp.net,Cookies,我有以下设置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); 但是,当我尝试读取
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时,该值为Null。cookie存在。我从未通过以下检查:
if (Request.Cookies["localization"] != null && !string.IsNullOrEmpty(Request.Cookies["localization"].Value))
帮助?回帖后检查是否完成?如果是这样,您应该从请求集合中读取cookie 通过将Cookie添加到Response.Cookie,Cookie将持久化到浏览器,并从Request.Cookie中读取 添加到响应的Cookie只能在页面位于同一请求上时读取。您是否厌倦了“请求”集合而不是“响应”集合 if (Request.Cookies["localization"] != null && !string.IsNullOrEmpty(Request.Cookies["localization"].Value)) if(Request.Cookies[“本地化”!=null&&!string.IsNullOrEmpty(Request.Cookies[“本地化”].Value)) 使用Response.Cookies.Add(cookie);而不是Response.Cookies.Set(cookie) 试试这个片段-
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指令中设置跟踪。我也遇到类似问题,回发时无法读取cookies。我的问题是我检查了cookie的安全属性是否为true。据说,当cookie的Secure属性打开时,只有当连接使用安全套接字层时,才会导致cookie被传输。然而,考虑到我没有通过SSL进行传输,我不确定第一次如何在浏览器中看到cookie,但在回发时却看不到。无论如何,将cookie.Secure设置为false,解决了问题,并在回发时读取cookie
很抱歉,如果这与您的问题无关,我想与您分享,因为我花了一些时间研究如何解决此问题。最有可能的答案见 当您尝试使用Response对象而不是Reqest检查cookie是否存在时,ASP.net会自动创建cookie
编辑:作为说明,我最后编写了一个软件,需要检查是否存在cookie,因为ASP.NET的cookie API使其成为噩梦。我最终编写了一个转换过程,该过程从请求中获取cookies并使我的状态成为对象。在请求结束时,我将状态对象转换回cookies,并将它们填入响应中(如果需要)。这缓解了试图找出响应中是否有cookies的问题,而是更新它们,避免创建毫无意义的cookies等等。我想我知道答案 只需删除
标记中的action属性
让它看起来像这样:
而不是这个:
然后应该使用
Response.Redirect(“DisplayName.aspx”)代码>在您的代码中。会在Chris Marisic的回答中添加此作为注释,但我没有此特权:-(
除了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行使其在回发上工作使用LiveHttpHeaders查看cookie是否返回到浏览器。别忘了接受问题的答案编辑后问题没有任何意义..不确定为什么响应。Cookies正在删除值,但谢谢。您为我节省了很多时间f时间。我刚刚犯了一个低级错误,使用响应对象读取cookie正在清除我的cookie!这是一个帮助。谢谢。嗯……这种行为可以用来故意删除现有cookie吗?@AbeyMarquez correct,您可以通过为给定cookie名称的cookie内容指定空字符串来删除cookie。这就是为什么t意外发生,创建了一个没有内容的cookie,删除了重要的cookie。