C# Cookie未更新

C# Cookie未更新,c#,cookies,C#,Cookies,我正在尝试更新cookie值,但它不起作用-我尝试过的所有操作都不会更新cookie,而且我总是得到cookie的初始值 因此,我已经搜索了,根据MSDN,我应该能够通过执行以下操作来更新cookie: HttpCookie cookie = new HttpCookie("cookiename"); cookie.Value = cookieValue; cookie.Expires = DateTime.Now.AddDays(30); HttpContext.Current.Respons

我正在尝试更新cookie值,但它不起作用-我尝试过的所有操作都不会更新cookie,而且我总是得到cookie的初始值

因此,我已经搜索了,根据MSDN,我应该能够通过执行以下操作来更新cookie:

HttpCookie cookie = new HttpCookie("cookiename");
cookie.Value = cookieValue;
cookie.Expires = DateTime.Now.AddDays(30);
HttpContext.Current.Response.Cookies.Set(cookie); // also just tried using .Add again here
由于这不起作用,我做了另一次搜索,SO上的人说我应该可以这样做:

HttpContext.Current.Response.Cookies["cookiename"].Value = cookieValue;
HttpContext.Current.Response.Cookies["cookiename"].Expires = DateTime.Now.AddDays(30);
但这也不起作用,所以我尝试删除cookie并重新添加它:

HttpCookie cookie = new HttpCookie("cookiename");
cookie.Value = cookieValue;
cookie.Expires = DateTime.Now.AddDays(-1);
HttpContext.Current.Response.Cookies.Add(cookie);

cookie.Expires = DateTime.Now.AddDays(30);
HttpContext.Current.Response.Cookies.Add(cookie);
在重新添加cookie之前,我还尝试使用以下内容删除cookie

ResponseCookies.Remove("cookiename");
这也不起作用,所以我现在不知道还有什么可以尝试。有人知道如何用c#更新cookie吗

更新


如果我在更新代码后单步检查代码并选中
HttpContext.Current.Request.Cookies[“cookiename”].Value
,它会显示新的值。如果我随后回收应用程序池,以便再次从文件中读取cookie,它将显示原始值,因此上面的代码似乎没有更新物理cookie,您不能

根据,您已将当前cookie替换为具有相同名称的新cookie。关于这一点,有整整一节

修改和删除Cookies

不能直接修改cookie。相反,更改cookie包括创建新cookie 使用新值,然后将cookie发送到浏览器以 覆盖客户端上的旧版本


更新

在写下评论后,我们在这里发现了问题

根据声明,您也不允许在cookie值中使用分号

此字符串是一个字符序列,不包括分号逗号空白。如果需要将此类数据放在名称或 值,某些编码方法(如URL样式%XX编码)无效 建议使用,但未定义或要求编码


我面临着类似的问题。如果要解决此问题,请使用以下方法设置并获取cookies

 public static void SetCookie(string key, string value, TimeSpan expires, bool http = false)
        {
        
            if (HttpContext.Current.Request.Cookies[key] != null)
            {
                
                var cookieOld = new HttpCookie(key);
                cookieOld.Expires = DateTime.Now.Add(expires);
                cookieOld.Value = value;
                HttpContext.Current.Response.Cookies.Add(cookieOld);
            }
            else
            {
                HttpCookie encodedCookie = new HttpCookie(key, value);
                encodedCookie.Expires = DateTime.Now.Add(expires);
                HttpContext.Current.Response.Cookies.Add(encodedCookie);
            }
        }
下面的代码用于获取cookie

 public static string GetCookie(string key)
        {
            string value = string.Empty;
            HttpCookie cookie = HttpContext.Current.Request.Cookies[key];

            if (cookie != null)
            {
                value = cookie.Value;
            }
            return value;
        }
下面是调用get和set函数的方法

public static string CustomerName
        {
            get { return CookieStore.GetCookie("customername"); }
            set { CookieStore.SetCookie("customername", value.ToString(), TimeSpan.FromHours(24), true); }
        }

尝试删除cookie,然后使用新值添加回cookie。看看这是否有效。是ajax请求吗?@MihirSolanki,不是ajax请求-否则我会使用
$.cookie
,因为这样效果更好-它实际上会更新cookie!无法直接更新物理cookie,因为cookie位于用户的计算机上。丢弃cookie是浏览器的责任。我已经阅读了整个部分,并尝试了该部分所说的内容(正如我在问题中所做的尝试所示)@Pete您是否尝试更改新cookie的过期日期?@Pete您正在测试的浏览器是哪一个?@Pete或您的
cookieValue
包含
?最后!:我和这个小家伙打了很多架。