У меня есть переменная сеанса, в которой хранится весь мой пользовательский объект, и когда человек входит на мой сайт с проверкой подлинности с помощью форм (используя вход в MVC по умолчанию), я назначаю переменную Session объекту пользователя следующим образом:
FormsAuthentication.SetAuthCookie(user.Username, model.RememberMe);
SessionUtil.User = user;
Все мои страницы настроены для работы с этим объектом Session, однако проблема возникает, когда они устанавливают флажок запомнить меня.Закройте их браузер, снова откройте браузер и снова зайдите на мой сайт.На этом этапе сеанс понятен, и они не вошли в систему, но мой сайт все еще помнит, кто они, однако все страницы, которые ссылаются на мой пользовательский объект в разрыве сеанса.
Я ищу способ заполнить пользовательский объект Session соответствующими данными, чтобы в приведенном выше сценарии объект сеанса не был пустым независимо от того, на какую страницу он попадал первым после того, как был «запомнен» после посещения моего сайта.,Где хорошее место для этого?В приложении запустить?В SessionUtil (сейчас это просто статическая оболочка для сеансовых переменных)?Базовый класс на контроллере?И как мне это сделать?У меня есть логика, написанная, чтобы отключить пользователя от имени пользователя.
Редактировать: Ну, application_start, похоже, не является хорошим местом, потому что делает это:
if (User != null)
{
SessionUtil.User = EntityServiceFactory.GetService<UserService>().GetUser(User.Identity.Name);
}
в методе не предотвращает возникновение проблемы.Я попытался сделать User.Identity.Name в проверке if, и затем я получил исключение нулевой ссылки, но я все еще помню и вошел в систему, когда страница действительно загружается.
Попробовал следующее в Global.asax для SplashКомментарий -X:
protected void Application_BeginRequest()
{
if(User != null)
{
SessionUtil.User = EntityServiceFactory.GetService<UserService>().GetUser(User.Identity.Name);
}
}
Это событие выполняет каждый запрос, но пользователь всегда равен нулю.Но я не получаю код _LogOnPartial по умолчанию:
@if(Request.IsAuthenticated) {
<text><strong>@User.Identity.Name</strong> [@Html.ActionLink("Profile", "Profile", "Account")]
[ @Html.ActionLink("Log Off", "LogOff", "Account") ]</text>
}
все еще показывает, что я вошел в систему, а имя пользователя там хорошо.