MVC 3 Cookies не работают
Я использую проверку подлинности с помощью форм для веб-сайта MVC, и у меня возникают проблемы с добавлением файлов cookie, я использую билет проверки подлинности с зашифрованными формами и добавляю его в файлы cookie, но при проверке моих файлов cookie он есть (по имени "AuthCookie"), но значение всегда равно нулю, а дата истечения срока действия всегда установлена на "01/01/0001 00:00"... вот мой код контроллера входа в систему:
[HttpPost]
public ActionResult Index(Login login, string returnUrl)
{
if (ModelState.IsValid)
try
{
User user = UserManager.Login(login.Username, login.Password);
string serialUser = Serialize.SerializeToString(user);
string ticket = FormsAuthentication.Encrypt(
new FormsAuthenticationTicket(1, login.Username, DateTime.Now, DateTime.Now.AddMinutes(20.0), login.RemeberMe, serialUser));
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, ticket) { Expires = DateTime.Now.AddMinutes(20) };
Response.Cookies.Add(cookie);
if (String.IsNullOrEmpty(returnUrl))
return RedirectToAction("Index", "Home");
else
return Redirect(returnUrl);
}
catch (LoginFailedException)
{
ModelState.AddModelError("", "Login failed: Invalid Username or Password.");
return View(login);
}
else
return View(login);
}
Сначала я предположил, что зашифрованная строка не работала из-за длины, но я проверил это, создав простой тестовый обман, и я получаю тот же результат.
Может ли кто-нибудь помочь
1 ответ
Когда вы вызываете Redirect() или RedirectToAction(), вы прекращаете ответ, чтобы файлы cookie не отправлялись клиенту. Некоторые решения:
- Используйте TempData для сохранения информации по прямой линии, записав Cookie в действие, на которое вы перенаправляете.
- Посмотрите, как информация о cookie- файлах проверки подлинности с помощью форм пишется в коде NerdDinner на CodePlex.
- Как уже упоминалось в комментариях, вы можете сохранить информацию о роли в сеансе. Рекомендация хранить информацию о роли в сеансе и извлекать ее из ролей, если она не найдена, сработает, но я начну с использования системы членства как есть и настройки производительности позже, если вы увидите, что это проблема, а не предположите, что она будет,