У меня есть веб-приложение MVC4, которое отлично работает на моем локальном компьютере, когда я запускаю его в Visual Studio.Asp MVC сессия потеряна после RedirectToAction
Таким образом, я публикую веб-сайт для сервера, чтобы перейти в прямом эфире с моим приложением. Но когда я пытаюсь войти в мое приложение переходит к следующему коду:
[HttpPost]
public ActionResult CheckLogin(LoginViewModel vm)
{
if (!String.IsNullOrWhiteSpace(vm.UserName) && !String.IsNullOrWhiteSpace(vm.Password))
{
User u = ...
// Get user from database with credentials
System.Web.HttpContext.Current.Session.Add("UserIdSession", u.Id);
return RedirectToAction("Validate", "Overview");
}
else
{
// process the error that the login failed
}
}
Перенаправление переходит к следующему действию:
[HttpGet]
public ActionResult Validate()
{
if (HttpContext.Current.Session["UserIdSession"] != null)
{
return View();
}
else
{
return RedirectToAction("Index", "Login");
}
}
Но проблема в том, что переменная сессии не существует и он всегда отправляет меня обратно на loginscreen
Я обнаружил, что выполнение перенаправления после установки сеанса вызывает подобное поведение, но я не смог найти ответ для решения этой проблемы ...
Поэтому у меня есть несколько вопросов о нем:
- Почему это работает на моей локальной машине, а не на сервере?
- Могу ли я изменить настройки сервера, чтобы работать таким образом, что я намерен делать? Перерабатывает ли он после перенаправления?
- Могу ли я воспроизвести это поведение на своей локальной машине, как на сервере, с некоторыми настройками?
- Должен быть простой способ решить эту проблему или я ошибаюсь? Нужно ли мне хранить переменные сеанса в базе данных или что-то в этом роде?
НИКОГДА НИКОГДА КОГДА-ЛИБО НИКОГДА пользовательский сеанс для целей аутентификации ... не делайте этого. он очень небезопасен и ненадежен (IIS может убивать сессию всякий раз, когда это кажется). ASP.NET предоставляет механизм аутентификации (несколько на самом деле), используйте их. FormsAuthentication для MVC4. –