Cookie未更新

时间:2016-03-10 09:35:41

标签: c# cookies

我正在尝试更新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

ResponseCookies.Remove("cookiename");

这也没有用,所以我现在还不确定还能尝试什么。有谁知道如何用c#更新cookie?

更新

如果我在更新代码后单步执行代码并检查HttpContext.Current.Request.Cookies["cookiename"].Value,则会显示新值。如果我然后回收应用程序池,以便必须再次从文件中读取cookie,它会显示原始值,所以上面的代码似乎没有更新物理cookie

2 个答案:

答案 0 :(得分:1)

你不能!

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

  

修改和删除Cookie

     

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

<强>更新

在评论中写完后,我们在这里找到了问题。

根据specs,您也不允许在Cookie值中使用分号。

  

此字符串是一系列字符,不包括分号逗号   和空格。如果需要在名称或中放置此类数据   值,一些编码方法如URL样式%XX编码是   建议,但没有定义或要求编码。

答案 1 :(得分:0)

我面临类似的问题。如果通过使用以下方法来设置和获取Cookie来解决此问题。

 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);
            }
        }

下面的代码用于GetCookie

 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); }
        }