ASP.NET MVC обработка пользователей - PullRequest
0 голосов
/ 11 декабря 2011

Привет,

Метод входа на моей странице ASP.NET MVC выглядит примерно так:

Check ModelState
Check Username and password
user = accountModel.GetUser(model.UserName);
this.HttpContext.Session[Biss.Extensions.SessionKey.userContext.ToString()] = new UserContext() { SiteRole = (SiteRoles)user.RoleId, Id = user.Id };
FormsAuthentication.SetAuthCookie(model.UserName, createPersistentCookie);

Во время разработки я перестраиваюсь, перезапуская решение многораз, и я заметил следующее:

  1. Запуск веб-сайта
  2. Вход в систему (с помощью метода выше)
  3. Восстановление душа
  4. Перезагрузка сайта

Теперь User.Identity.Name все равно будет установлен, но

HttpContext.Session[Biss.Extensions.SessionKey.userContext.ToString()]

равно нулю?Я полагаю, что веб-сайт перезагружается при выполнении перестройки / перезапуска, но как все еще можно установить User.Identity.Name?Как я мог справиться с этим?

BestRegards

Ответы [ 2 ]

2 голосов
/ 11 декабря 2011

Поскольку вы перезапускаете домен приложений, сеанс удаляется, поскольку он сохраняется в памяти.Подумайте, что то же самое может произойти на вашем рабочем сервере.При определенных обстоятельствах IIS может просто перезапустить пул приложений: например, после достижения некоторого неактивности или порога памяти / ЦП.Чтобы не потерять данные сеанса, вы можете использовать внешнее хранилище сеансов, чтобы оно не оставалось в памяти.Посмотрите на следующую статью для различных возможностей: http://msdn.microsoft.com/en-us/library/ms972429.aspx

0 голосов
/ 11 декабря 2011

Когда вы перезапускаете веб-сайт, вы очищаете свою сессию. Состояние сеанса просто пропало.

Я бы порекомендовал избавиться от использования Session для такого простого сценария, как логин пользователя. Мой общий ответ почти везде - используйте сессию, если у вас есть для этого очень серьезные причины.

Вы можете хранить информацию о пользователе в базе данных и читать ее, чем вам действительно нужно.

...