Есть ли способ проверить, что Response.Cookies.Add () успешно? - PullRequest
1 голос
/ 16 ноября 2011

В ASP.net 2.0 Response.Cookies.Add() - это VOID (что меня несколько поражает). Есть ли способ проверить, успешно ли функция добавила файл cookie?

Я просто потратил 2 часа, пытаясь отследить проблему аутентификации для одного пользователя. Наконец я понял, что он был в группе групп AD, и я считаю, что файл cookie, который мы для него собирали и пытались установить, составлял> 4096 байт.

Было бы неплохо знать заранее, если вызов Response.Cookies.Add () не удался.

Мы поймали ошибку позже на странице global.asax, когда сделали:

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

и authCookie для этого пользователя всегда был нулевым.

Спасибо за ответы.

Я решил проверить размер перед вызовом 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 ]

1 голос
/ 16 ноября 2011

Я установил простой проект, который записывает случайное значение 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

Похоже, вам придется проверить себя перед написаниемэто.

0 голосов
/ 17 ноября 2011

Response.Cookie.Add () всегда выполняется успешно. Это клиент, принимающий указанный cookie, который может потерпеть неудачу. Но метод Add () не может знать - он просто помещает cookie в HTTP-ответ. Вы не будете знать, пока ответ HTTP не будет отправлен обратно и клиент его обработает. Что происходит долго после того, как Add () возвращается.

Таким образом, единственный способ проверить это - проверить наличие cookie-файла при последующих запросах, что, похоже, вы уже делаете, проверяя информацию об аутентификации.

0 голосов
/ 16 ноября 2011

Да, но, вероятно, не так, как вы хотите. На следующей странице или запросе отметьте его в Request.Cookies, если файл cookie доступен. Если нет, вы можете предположить, что Response.Cookies не смогли добавить cookie (у них отключены куки, они были очищены и т. Д.).

Вы не можете проверить Response.Add работал, когда это происходит, потому что это действительно не происходит, пока ответ не отправлен в браузер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...