Разница между HttpResponse: SetCookie, AppendCookie, Cookies.Add

существуют несколько способов создания куки с несколькими значениями в ASP.NET:

var cookie = new HttpCookie("MyCookie");
cookie["Information 1"] = "value 1";
cookie["Information 2"] = "value 2";

// first way
Response.Cookies.Add(cookie);

// second way
Response.AppendCookie(cookie);

// third way
Response.SetCookie(cookie);

Когда следует использовать какой путь? Я читал, что метод SetCookie обновляет файл cookie, если он уже выходит. Разве другие способы не обновляют существующий файл cookie?

И является ли следующая рекомендация кода для написания файлов cookie с одним значением?

Response.Cookies["MyCookie"].Value = "value";

Ответ 1

Когда следует использовать какой путь?

Это зависит от того, какую операцию Cookie вы хотите сделать.

Обратите внимание, что Add и AppendCookie выполняют ту же функциональность, кроме того факта, что с AppendCookie вы не ссылаетесь на свойство Cookies class Response и оно делает это для вас.

  • Response.Cookies.Add - добавляет указанный файл cookie в коллекцию файлов cookie.
  • Response.AppendCookie - добавляет HTTP файл cookie в коллекцию встроенных файлов cookie
  • Response.SetCookie - обновляет существующий файл cookie в коллекции файлов cookie.

Exceptions не будут выбрасываться при добавлении куки файлов дубликатов или при попытке обновить файл cookie, который не существует.

Основное exception этих методов: HttpException (cookie добавляется после отправки HTTP-заголовков).

Метод Add позволяет дублировать файлы cookie в коллекции файлов cookie. Используйте метод Set, чтобы обеспечить уникальность файлов cookie в коллекции файлов cookie.

Спасибо за MSDN !

Ответ 2

Если я правильно помню оба

Response.Cookies.Add(..)

а также

Response.AppendCookie(..)

позволит добавить к ответу несколько файлов cookie с таким же именем.

С другой стороны

Response.SetCookie(..)

а также

Response.Cookies[key].Value = value;

всегда будет перезаписывать предыдущие файлы cookie с тем же именем.

Ответ 3

Для контрейлерных на TNE в комментарий в Wiktor ответ, AppendCookie и SetCookie не должны быть использованы - они для внутреннего использования в рамках.NET. Они не должны быть публичными, но они есть, я предполагаю, что это будет взломать конвейер IIS где-то еще.

Таким образом, вы должны настроить свой файл cookie таким образом (или написать метод расширения для установки нескольких файлов cookie):

string cookieName = "SomeCookie";
string cookieValue = "2017";

if (Response.Cookies[cookieName] == null)
{
    Response.Cookies.Add(new HttpCookie(cookieName, cookieValue));
}
else
{
    Response.Cookies[cookieName].Value = cookieValue;
}