我有以下设置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读回。

如果页面在同一请求上,则只能读取添加到Response的cookie。

其他提示

最有可能的答案见于这篇文章

  

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

编辑作为一个注释,我最终编写的软件需要检查ASP.NET因其cookie API而成为噩梦的cookie。我最终编写了一个转换过程,该过程从请求中获取cookie并生成我的状态对象。在请求结束时,我将我的状态对象转换回cookie并将其填充到响应中(如果需要)。这减轻了试图确定cookie是否在响应中,更新它们,避免创建无意义的cookie等。

你累了<!>“请求<!>”;集合代替<!> quot; Response <!> quot;集合?

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

我想我知道答案。

只需删除<form>标记中的操作属性。

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

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

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

如果您在调试模式下进行编译,请打开相关页面的跟踪并确保cookie位于请求集合中。在aspx文件中的@page指令中设置跟踪。

试试这个片段 -

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。对我来说问题是我检查了cookie的Secure属性为true。据说,当打开cookie的Secure属性时,只有在连接使用安全套接字层时才会传输cookie。但是,我不确定我是如何第一次在浏览器中看到cookie,而不是回发,因为我没有通过SSL进行传输。无论如何,将cookie.Secure转为false,解决了问题,并在回发时读取了cookie。

很抱歉,如果您不必对您的问题采取任何措施,我想分享一下,因为我花了一些时间来了解如何解决这个问题。

将此作为对Chris 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行使其适用于回发

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top