Определите обратную передачу из элемента управления входом ASP.NET - PullRequest
1 голос
/ 07 октября 2010

У меня есть <asp:Wizard>, который применим только для пользователя, вышедшего из системы. Если пользователь в данный момент вошел в систему, он / она будет перенаправлен на другую страницу. На одном из шагов мастера, как часть мастера, я запрашиваю учетные данные через элемент управления <asp:Login> и регистрируюсь в пользователе. Это представляет проблему.

Согласно MSDN : «Когда пользователь использует элемент управления Login для входа на веб-сайт, все данные в состоянии просмотра и все данные публикации теряются. Не выполняйте действия в событии LoggedIn которые полагаются на состояние просмотра. "

Из-за этого мой элемент управления Wizard забывает шаг, на котором он находится после процесса входа. MSDN рекомендует : "Если вы встраиваете элемент управления Login в объект WizardStep, явно задайте свойство ActiveStepIndex в обработчике события Page_Load, если пользователь прошел аутентификацию. Элемент управления Wizard не автоматически переходит к следующему объекту WizardStep в этот сценарий. "

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

  • Уже вошли в систему некоторое время назад; необходимо перенаправить.
  • Только что вошел в систему изнутри мастера; необходимо перейти к следующему шагу мастера.

Спасибо за любые идеи.

Ответы [ 2 ]

1 голос
/ 07 октября 2010

«Странная игра. Единственный выигрышный ход - не играть».Ссылка на Военные игры

Вместо того, чтобы играть в игру, предотвращающую перенаправление, возможно другое решение.Поскольку я контролирую все ссылки на соответствующую страницу, когда пользователь входит в систему, я могу изменить назначение (href) этих ссылок на странице после перенаправления.Это позволяет обойтись без необходимости «играть» на самой странице и позволяет странице, если пользователь вошел в нее, всегда переходить к соответствующему следующему шагу мастера.

1 голос
/ 07 октября 2010

Вы можете установить переменную Session, когда пользователь входит в систему: Session("LoggedIn") = Now

При проверке перенаправления пользователя проверьте, был ли LoggedIn не менее 3 минут назад, а затем перенаправьте. Поскольку вы устанавливаете эту переменную Session после входа в систему, она будет доступна (или может быть нулевой, если вы не вошли в систему).

Возможно, вы захотите создать пользовательский элемент управления Login, унаследованный от Login, который устанавливает эту переменную Session при каждом входе пользователя в систему:

Public Class MyLogin : Inherits Login
    Private Sub MyLogin_LoggedIn() Handles Me.LoggedIn
        HttpContext.Current.Session("LoggedIn") = Now
    End Sub
End Class
...