广告:阿里云新人专场
Event code: 3005
Event message: 发生了未经处理的异常。
Exception information:
Exception type: HttpException
Exception message: 服务器无法在发送 HTTP 标头之后追加 Cookie。
在 System.Web.HttpResponse.AppendCookie(HttpCookie cookie)
服务器向客户端发送设置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。
还是发些代码看下吧
protected void Page_Load(object sender, EventArgs e) { HttpCookie cookie = new HttpCookie("name"); cookie.Value = "value"; this.Response.AppendCookie(cookie); cookie = new HttpCookie("name"); cookie.Value = "value1"; this.Response.AppendCookie(cookie); cookie = new HttpCookie("name1"); cookie.Value = "value1"; Response.SetCookie(cookie); cookie.Value = "value2"; Response.SetCookie(cookie); Response.Cookies.Add(cookie); cookie = new HttpCookie("name"); cookie.Value = "value3"; Response.Cookies.Add(cookie); cookie = new HttpCookie("name"); cookie.Value = "value4"; Response.Cookies.Add(cookie); //Response.Flush();//取消注释后面代码将会引发异常 cookie = new HttpCookie("name"); cookie.Value = "value5"; Response.Cookies.Add(cookie); cookie = new HttpCookie("name"); cookie.Value = "value1"; Response.AppendCookie(cookie); cookie = new HttpCookie("name"); cookie.Value = "value5"; Response.SetCookie(cookie);//注意这里尽管它在最后,影响的却只是cookies集合中第一个key为“name”的cookie. }
输出给浏览器:
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代码有问题,有重复代码
广告:阿里云采购优惠专区