我正在尝试更新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
答案 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); }
}