有没有办法验证Response.Cookies.Add()是否成功?

时间:2011-11-16 18:02:10

标签: asp.net cookies

在ASP.net 2.0中Response.Cookies.Add()是一个VOID(这让我感到很困惑)。有没有办法检查功能是否成功添加了cookie?

我花了2个小时试图追踪一个用户的身份验证问题。最后,我意识到他在AD组的BUNCH中,我相信我们为他建立的cookie,并试图设置,是> 4096字节。

如果对Response.Cookies.Add()的调用失败,最好先了解。

我们稍后在global.asax页面中捕获错误:

 HttpCookie authCookie = Context.Request.Cookies[cookieName];

此用户的authCookie始终为null。

感谢您的回复。

我决定在调用Response.Cookies.Add()之前检查大小,并相应地提醒用户。

int iSize = System.Text.UTF8Encoding.UTF8.GetByteCount(authCookie.Values.ToString());
                if (iSize > 4096)
                {
                    lblMessage.Text = "The authentication cookie cannot be set as it is > 4096 bytes; a limit imposed by the browser.  The current size of the Cookie.Values is " + iSize.ToString() + " bytes.";
                    lblMessage.CssClass = "msgBox Alert";
                    return;
                }

3 个答案:

答案 0 :(得分:1)

我设置了一个编写随机cookie值的简单项目,并使用Fiddler检查响应:

GET http://localhost.:2605/Default.aspx HTTP/1.1
Accept: */*
Accept-Language: en-us
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: localhost.:2605
Pragma: no-cache
Cookie: ASP.NET_SessionId=wxpo32z2zxr1qlbwgx4on3z2; test1047139665=value775124204

您可以在上方标题的Cookie部分看到Cookie。这与以下文档一致:http://msdn.microsoft.com/en-us/library/system.web.httpresponse.cookies.aspx

此处记录了尺寸限制:

http://support.microsoft.com/kb/306070

看起来你在编写之前必须先检查自己。

答案 1 :(得分:0)

是的,但可能不是你想要的。在后续页面或请求中,如果cookie可用,请在Request.Cookies中进行检查。如果没有,你可以假设Response.Cookies无法添加cookie(他们关闭cookie,清除它们等)。

您无法验证Response.Add何时发生,因为在将响应发送到浏览器之前它确实不会发生。

答案 2 :(得分:0)

Response.Cookie.Add()总是成功。这是客户接受可能失败的cookie。但是Add()方法无法知道 - 因为它只是将cookie放在HTTP响应中。在HTTP响应被发回并且客户端处理它之前,您将不会知道。这在Add()返回后很久就会发生。

因此,验证这一点的唯一方法是检查后续请求中的cookie,这似乎是您已经通过检查身份验证信息而做的。