Cookie 未更新

Pet*_*ete 5 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
Run Code Online (Sandbox Code Playgroud)

由于这不起作用,我进行了另一次搜索,SO 上的人说我应该能够做到这一点:

HttpContext.Current.Response.Cookies["cookiename"].Value = cookieValue;
HttpContext.Current.Response.Cookies["cookiename"].Expires = DateTime.Now.AddDays(30);
Run Code Online (Sandbox Code Playgroud)

但这也不起作用,所以我尝试删除 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);
Run Code Online (Sandbox Code Playgroud)

在重新添加它之前,我还尝试使用以下方法删除 cookie

ResponseCookies.Remove("cookiename");
Run Code Online (Sandbox Code Playgroud)

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

更新

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

Sma*_*tis 4

你不能!

根据MSDN 的说法,您已将当前的 cookie 替换为同名的新 cookie。有一个完整的章节是关于这个的。

修改和删除 Cookie

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


更新

写完评论后,发现问题就在这里。

根据规范,您也不允许在 cookie 值中使用分号。

该字符串是不包括分号逗号空格的字符序列。如果需要将此类数据放入名称或值中,建议使用某种编码方法,例如 URL 样式 %XX 编码,但没有定义或要求编码。