繁体   English   中英

更改已存在的 cookie 的 cookie 值

[英]Change a cookie value of a cookie that already exists

我有一个名为 SurveyCookie 的 cookie。 像这样创建:

var cookie = new HttpCookie("SurveyCookie");
cookie.Values["surveyPage"] = "1";
cookie.Values["surveyId"] = "1";
cookie.Values["surveyTitle"] = "Definietly not an NSA Survey....";
cookie.Values["lastVisit"] = DateTime.UtcNow.ToString();
cookie.Expires = DateTime.UtcNow.AddDays(30);
Response.Cookies.Add(cookie);

这很好用。 现在,当我想像这样更改“surveyPage”值时,问题就来了。

下面将创建一个新的 cookie,这不是我想要的。

int cookieValue = Convert.ToInt32(Request.Cookies["SurveyCookie"]["surveyPage"]) + 1;
Response.Cookies["SurveyCookie"]["surveyPage"] = cookieValue.ToString();

然后我尝试了下面的这段代码,它也不起作用。 当应该是 2 时,surveyPage 仍然是 1。

Request.Cookies["SurveyCookie"]["surveyPage"] = cookieValue.ToString(); 

由于以上都不起作用,什么会改变surveyPage的cookies值?

来自ASP.NET Cookies 概述

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

你可以试试这个:

HttpCookie cookie = Request.Cookies["SurveyCookie"];
if (cookie == null)
{
    // no cookie found, create it
    cookie = new HttpCookie("SurveyCookie");
    cookie.Values["surveyPage"] = "1";
    cookie.Values["surveyId"] = "1";
    cookie.Values["surveyTitle"] = "Definietly not an NSA Survey....";
    cookie.Values["lastVisit"] = DateTime.UtcNow.ToString();
}
else
{
    // update the cookie values
    int newSurveyPage = int.Parse(cookie.Values["surveyPage"]) + 1;
    cookie.Values["surveyPage"] = newSurveyPage.ToString();
}

// update the expiration timestamp
cookie.Expires = DateTime.UtcNow.AddDays(30);

// overwrite the cookie
Response.Cookies.Add(cookie);

每次需要修改现有 cookie 时,您都应该始终创建一个新 cookie,以下对我有用:

var cookie = new System.Web.HttpCookie("SurveyCookie");
cookie.Values["surveyPage"] =  newValue;
cookie.Expires = DateTime.Now.AddDays(1000);
cookie.SameSite = System.Web.SameSiteMode.None;
cookie.Secure = true;
this.HttpContext.Response.Cookies.Add(cookie);

查看Response.SetCookie()方法,因为这将设置更新您现有的 cookie

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM