ASP.NET Cookieless Forms Auth не устанавливает cookie, когда страница входа в закладки - PullRequest
4 голосов
/ 21 марта 2011

Для проверки подлинности форм нашего приложения ASP.NET 4.0 установлено значение cookieless = "AutoDetect." Я заметил, что если пользователь закладывает нашу страницу входа в систему, ссылка на закладку устанавливается на https://hostname.com/Login.aspx?AspxAutoDetectCookieSupport=1. Если пользователь переходит на это непосредственно из нового сеанса браузера и выполняет действительный вход в систему, cookie не устанавливается. Если перейти непосредственно к этой странице, но удалить AspxAutoDetectCookieSupport из строки запроса, файл cookie будет создан правильно.

Если пользователь переходит непосредственно к Default.aspx или корневому каталогу, вход в систему работает правильно, даже если AspxAutoDetectCookieSupport = 1 прикреплен к строке запроса.

Когда пользователь нажимает кнопку входа в систему, мы выполняем обратную передачу на страницу входа и вручную проверяем учетные данные пользователя по нашей базе данных. В случае успеха мы делаем:

FormsAuthentication.RedirectFromLoginPage(userName, false);

Я потратил много часов на отладку этого, включая просмотр кода аутентификации форм ASP.NET в справочном источнике, и не смог определить причину этого. Единственное решение, которое у нас есть на данный момент, - это попросить пользователей удалить страницу входа из URL-адреса их закладок и добавить кнопку закладки на нашей странице входа, чтобы пользователи могли нажимать.

Есть ли другое решение для устранения этой проблемы проверки подлинности с помощью форм? Это проверка подлинности в формах?

1 Ответ

1 голос
/ 22 марта 2011

Проблема здесь в том, что вы всегда используете RedirectFromLoginPage, независимо от того, указано местоположение перенаправления или нет. Если это не предусмотрено, то перенаправление не удастся Правильным решением этой проблемы будет проверка URL-адреса перенаправления и перенаправление на default.aspx, если он недоступен (пример источника заимствован из этой статьи блога ):

// Once the user's entered credentials are verified //
if(Request.Params["ReturnUrl"] != null)
{
    FormsAuthentication.RedirectFromLoginPage(txtUserName.text, false);
}
else
{
    FormsAuthentication.SetAuthcookie(txtUserName.text, false);
    Response.Redirect("Default.aspx");
}
...