31

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

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

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

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

4

3 回答 3

30

如果我没记错的话

Response.Cookies.Add(..)

Response.AppendCookie(..)

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

另一方面

Response.SetCookie(..)

Response.Cookies[key].Value = value;

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

于 2013-04-08T21:45:56.067 回答
18

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

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

请注意,AddandAppendCookie正在执行相同的功能,除了AppendCookie您没有引用 the 的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

于 2013-04-08T22:35:30.317 回答
7

在 Wiktor 的回复中捎带tne 的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;
}
于 2017-01-16T12:58:57.817 回答