Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Cookie在ASP.net中失去价值_C#_Asp.net_Cookies - Fatal编程技术网

C# Cookie在ASP.net中失去价值

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); 但是,当我尝试读取

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