HttpResponse:SetCookie,AppendCookie,Cookies.Add之间的区别

Fel*_*x C 28 c# asp.net cookies

有一些不同的方法可以在ASP.NET中创建多值cookie:

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);
Run Code Online (Sandbox Code Playgroud)

我什么时候应该使用哪种方式?我已经读过该SetCookie方法更新cookie,如果它已经退出.其他方式也不会更新现有的cookie吗?

编写单值cookie是以下代码最佳实践吗?

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

Wik*_*hla 29

如果我没记错的话

Response.Cookies.Add(..)
Run Code Online (Sandbox Code Playgroud)

Response.AppendCookie(..)
Run Code Online (Sandbox Code Playgroud)

将允许多个同名的cookie附加到响应中.

另一方面

Response.SetCookie(..)
Run Code Online (Sandbox Code Playgroud)

Response.Cookies[key].Value = value;
Run Code Online (Sandbox Code Playgroud)

将始终覆盖以前的同名cookie.

  • 另外值得指出的是参考文档(MSDN)上的以下消息[`AppendCookie`](http://msdn.microsoft.com/en-us/library/system.web.httpresponse.appendcookie)和[` SetCookie`](http://msdn.microsoft.com/en-us/library/system.web.httpresponse.setcookie):*"此API支持.NET Framework基础结构,不能直接在您的代码中使用."* (10认同)
  • 这个答案更清楚,更重要. (6认同)

Yai*_*vet 17

我什么时候应该使用哪种方式?

这取决于您想要执行的Cookie操作.

请注意,Add并且AppendCookie正在执行相同的功能,除非AppendCookie您没有引用该Cookies属性Response class并且它正在为您执行此操作.

  • Response.Cookies.Add- 指定的cookie 添加到cookie集合中.
  • Response.AppendCookie- HTTP cookie 添加内部 cookie集合
  • Response.SetCookie- 更新 cookie集合中的现有cookie.

Exceptions 添加重复cookie或尝试更新不存在的cookie时不会抛出.

主要exception的这些方法是:HttpException(HTTP标头已被发送后一个cookie被附加.)

Add方法允许cookie集合中的重复cookie.使用Set方法确保cookie集合中cookie的唯一性.

谢谢你的MSDN!

  • `SetCookie`更新现有的cookie:这是否意味着如果cookie不存在则会出现异常或cookie不会被设置?如果已经存在具有相同名称的cookie,其他方法是否会更新cookie? (2认同)

Chr*_*s S 5

捎带上TNE的在Wiktor的答复意见,AppendCookieSetCookie不应使用-他们是由.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;
}
Run Code Online (Sandbox Code Playgroud)