简述HttpResponse.SetCookie、HttpResponse.AppendCookie、HttpResponse.Cookies.Add三者的区别

来源:互联网 发布:apache web 压力测试 编辑:程序博客网 时间:2024/05/23 17:36

服务器向客户端发送设置Cookie时,可用HttpResponse.SetCookie、HttpResponse.AppendCookie、HttpResponse.Cookies.Add这三个家伙。

简单描述下他们的区别(注意红色部分):

HttpResponse.Cookies.Add:将 指定 cookie添加到Cookies集合,同key的cookie可以重复添加,总是添加而不是更新;

HttpResponse.AppendCookie:将 Http cookie追加加到Cookies集合,同key的cookie可以重复添加,总是添加而不是更新,它和HttpResponse.Cookies.Add的功能几乎一样,最大的区别是添加前后的事件和抛出的异常不尽相同。

HttpResponse.SetCookie:更新Cookies集合中第一个同key的cookie,如果找不到同key的cookie,则添加一个cookie到Cookies集合中。

在asp.net下使用时,它们有一个共同的异常:System.Web.HttpException 服务器无法在发送 HTTP 标头之后修改 cookie。

还是发些代码看下吧

  1. protected void Page_Load(object sender, EventArgs e)
  2. {
  3. HttpCookie cookie = new HttpCookie("name");
  4. cookie.Value = "value";
  5. this.Response.AppendCookie(cookie);
  6. cookie = new HttpCookie("name");
  7. cookie.Value = "value1";
  8. this.Response.AppendCookie(cookie);
  9. cookie = new HttpCookie("name1");
  10. cookie.Value = "value1";
  11. Response.SetCookie(cookie);
  12. cookie.Value = "value2";
  13. Response.SetCookie(cookie);
  14. Response.Cookies.Add(cookie);
  15. cookie = new HttpCookie("name");
  16. cookie.Value = "value3";
  17. Response.Cookies.Add(cookie);
  18. cookie = new HttpCookie("name");
  19. cookie.Value = "value4";
  20. Response.Cookies.Add(cookie);
  21. //Response.Flush();//取消注释后面代码将会引发异常
  22. cookie = new HttpCookie("name");
  23. cookie.Value = "value5";
  24. Response.Cookies.Add(cookie);
  25. cookie = new HttpCookie("name");
  26. cookie.Value = "value1";
  27. Response.AppendCookie(cookie);
  28. cookie = new HttpCookie("name");
  29. cookie.Value = "value5";
  30. Response.SetCookie(cookie);//注意这里尽管它在最后,影响的却只是cookies集合中第一个key为“name”的cookie.
  31. }

输出给浏览器:

Set-Cookie: name=value5; path=/
Set-Cookie: name=value1; path=/
Set-Cookie: name1=value2; path=/
Set-Cookie: name1=value2; path=/
Set-Cookie: name=value3; path=/
Set-Cookie: name=value4; path=/
Set-Cookie: name=value5; path=/
Set-Cookie: name=value1; path=/

实际有效Cookie:

Cookie: name1=value2; name=value1

综上所述,如果对cookie的唯一性有绝对的要求,那么请使用HttpResponse.SetCookie而不是其它,以防止出现读取混乱。

 另可参考http://stackoverflow.com/questions/15889371/difference-between-httpresponse-setcookie-appendcookie-cookies-add

转自http://aspxhtml.com/post-226

转载请注明:AspxHtml学习分享网 » 简述HttpResponse.SetCookie、HttpResponse.AppendCookie、HttpResponse.Cookies.Add三者的区别

0 0