Перенаправление ASP.Net FormsAuthentication Потерял cookie между перенаправлением и Application_AuthenticateRequest - PullRequest
3 голосов
/ 08 февраля 2010

У меня есть файл cookie FormsAuthentication, который является постоянным и работает независимо в среде разработки, тестирования и производства.У меня есть пользователь, который может аутентифицироваться, объект пользователя создан, cookie-файл аутентификации добавляется в ответ:

'Custom object to grab the TLD from the url
authCookie.Domain = myTicketModule.GetTopLevelDomain(Request.ServerVariables("HTTP_HOST"))
FormsAuthentication.SetAuthCookie(authTicket.Name, False)
Response.SetCookie(authCookie)

Пользователь немного обрабатывается, чтобы проверить первый раз вход в систему, вопросы безопасности,и т. д., а затем перенаправляется со следующим тидбитом:

Session.Add("ForceRedirect", "/FirstTimeLogin.aspx")
Response.Redirect("~/FirstTimeLogin.aspx", True)

С помощью перерыва отладки я могу убедиться, что коллекция cookie содержит как cookie, не относящиеся к аутентификации, которые я установил для другой цели, так и формыauthenticationпеченье.Затем следующий шаг в этом процессе происходит в ApplicationAuthenticateRequest в global.asax:

Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs)
    Dim formsCookieName As String = myConfigurationManager.AppSettings("FormsCookieName")
    Dim authCookie As HttpCookie = Request.Cookies(formsCookieName) 

На этом этапе для ОДНОГО пользователя authCookie - ничто.У меня есть 15 000 других пользователей, на которых это не влияет.Однако для одного пользователя cookie просто исчезает без следа.Я видел это раньше с исключениями w3wp.exe, исключениями сервера состояний и другими исключениями, связанными с процессом IIS, но я не получаю никаких исключений в журнале событий.w3wp.exe не падает, у сервера состояний есть некоторые тайм-ауты, но они кажутся не связанными (что подтверждается метками времени), и это происходит только с этим одним пользователем в этом одном домене (этот код используется в 2 разных TLD и приблизительно в 10 других поддоменах).

Один путь, который я исследую, - это то, что печенье может быть слишком большим.Я бы подумал, что будет проверка размера куки, входящего в ответ, и я не думаю, что это повлияет на него таким образом.Любые идеи, почему запрос может сбросить куки?

ПРИМЕЧАНИЕ. Вторичный файл cookie, который я упомянул, который я установил, также сбрасывается (и он очень крошечный).

РЕДАКТИРОВАТЬ-ПРИМЕЧАНИЕ: маркер сеанса НЕ теряется, когда это происходит.Однако, поскольку файл cookie аутентификации утерян, он игнорируется и заменяется при последующем входе в систему.

Ответы [ 2 ]

5 голосов
/ 16 февраля 2010

Оказывается, что данные cookie, загружаемые в cookie для данного конкретного пользователя, превысили максимально допустимый размер в его зашифрованном формате. Данные в незашифрованном виде помещаются, но после запуска шифрования размер становится слишком большим для обработки. Это привело к удалению файла cookie и всех файлов cookie, добавленных после него, из заголовка ответа.

Преобразование количества данных, введенных в cookie, решило проблему.

0 голосов
/ 08 февраля 2010

Потенциальная проблема - способ перенаправления; установив логическое значение true, вы отправляете исключение ThreadAbortException и можете потерять маркер сеанса. Либо установите логическое значение на false, либо используйте FormsAuthentication.RedirectFromLoginPage

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