существуют несколько способов создания куки с несколькими значениями в 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;
}