2009-04-08 2 views
8

Использование этого метода после вызова SignOut() перенаправляется на «... login.aspx? ReturnUrl =% 2fmydomainname% 2flogout.aspx», чтобы пользователь не мог снова войти в систему, так как успешный вход в систему возвращается на страницу выхода. Страница входа в систему установлена ​​в webconfig, и приложение успешно получает эту страницу. Почему ReturnURL застрял на хвосте URL-адреса?FormsAuthentication RedirectToLoginPage Quirk

ответ

15

Вот как работает RedirectFromLoginPage. Он добавляет текущий URL-адрес в строку запроса страницы входа. Таким образом, страница входа в систему может перенаправить пользователя обратно в место, где он находится.

Если вы не хотите, чтобы это произошло, вы можете вручную перенаправить на страницу входа в систему, используя Response.Redirect.

+1

Чтобы имитировать поведение FormsAuthentication без ReturnUrl, вызовите 'Response.Redirect (FormsAuthentication.LoginUrl, ложь),' –

+2

И добавить после этого вызова на 'HttpContext.Current.ApplicationInstance.CompleteRequest()' –

+0

По-видимому, наилучшей практикой было бы никогда не использовать FormsAuthentication.RedirectToLogin() на странице выхода из системы, которая регистрирует пользователя. Кроме того, существует рекомендуемая последовательность способов вызова на странице выхода из системы, которая гарантирует, что все артефакты FormsAuthentication будут очищены. См. Http://stackoverflow.com/questions/412300/formsauthentication-signout-does-not-log-the-user -out – condiosluzverde

0

Не уверен, что это помогает, но в соответствии с документами также существует перегруженный метод FormsAuthentication.RedirectToLoginPage, который берет строку и «перенаправляет браузер на URL-адрес входа с указанной строкой запроса».

См http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.redirecttologinpage.aspx

+1

Нет, он просто добавляет вашу пользовательскую строку запроса после своего собственного ReturnUrl. –

1

использовать этот код на выходе из системы

<asp:LoginStatus ID="LoginStatus1" runat="server" LogoutPageUrl="/xyz.aspx" LogoutAction="Redirect" /> 
+0

Не могли бы вы пояснить, почему этот код отвечает на вопрос? Кодовые ответы [обескуражены] (http://meta.stackexchange.com/q/148272/274165), потому что они не учат решению. (Это сообщение было помечено как минимум одним пользователем, предположительно потому, что они считали, что ответ без объяснений должен быть удален.) –