饼干在ASP.net

问题描述:

我有以下代码设置一个cookie失去价值。该cookie存在。如果检查,我永远不会通过以下内容:饼干在ASP.net

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

帮助?

+0

使用的LiveHTTPHeaders看cookie是否被送回浏览器。 http s://addons.mozilla.org/en-US/firefox/addon/3829 – 2009-05-27 20:19:00

+0

不要忘记接受问题的答案 – 2010-10-11 22:15:23

检查完成后发回?如果是这样,您应该从Request集合中读取Cookie。

cookies通过将它们添加到Response.Cookies并从Request.Cookies中读回来保存到浏览器中。

添加到Response的cookie只有在页面处于相同请求时才能被读取。

+0

不确定为什么Response.Cookies会删除值,但谢谢。你为我节省了很多时间。 – 2012-12-12 18:19:09

你厌倦了“请求”集合而不是“响应”集合吗?

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

use 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指令中设置跟踪。

我有一个类似的问题,我无法在回发中读取cookie。对我来说问题是我检查了cookie的Secure属性为true。据说,当cookie的Secure属性打开时,它只会在连接使用安全套接字层时才会传输cookie。不过,我不确定我是如何第一次在浏览器中看到cookie的,但考虑到我没有通过SSL进行传输,所以不会在回发中看到。无论如何,将cookie.Secure变成false,解决了问题,并在回发时读取了cookie。

对不起,如果这不需要对你的问题做任何事情,我想分享这个,因为我花了一些时间寻找如何解决这个问题。

最有可能的答案是看到this post

当你尝试检查一个cookie的使用Response对象的存在,而不是传请求,ASP.net会自动创建一个cookie。

编辑:作为一个说明,我结束了,因为它们的cookie API编写需要检查的cookie是ASP.NET使得噩梦的存在软件。我最终编写了一个转换过程,该过程从请求中获取cookie并创建我的状态对象。在请求结束时,我将状态对象转换回cookie并将它们填入响应中(如果需要)。这缓解了试图弄清楚cookie是否在响应中,而不是更新它们,避免创建无意义的cookie等。

我想我知道答案。

只需删除<form>标记中的动作属性即可。

使它看起来像这样:<form id="form1" runat="server">

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

然后您应该在代码中使用Response.Redirect("DisplayName.aspx");

想补充一点,以克里斯Marisic的答案注释,但我没有那个privelage :-(

而且什么克里斯在他的编辑说,大约从请求删除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线使其在回传工作