Измените значение cookie cookie, которое уже существует

У меня есть cookie под названием SurveyCookie. Создано так:

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

Затем я попробовал этот код, ниже которого тоже не работает. Опросная страница все еще 1, когда она должна быть 2.

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

Поскольку ни то, ни другое не работает, что изменит значение cookie для surveyPage?

Ответ 1

Из обзора файлов cookie ASP.NET:

Вы не можете напрямую модифицировать файл 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);

Ответ 2

Проверьте метод Response.SetCookie() как это установит обновление существующего файла cookie