MVC 3 Cookies не работают - PullRequest
       37

MVC 3 Cookies не работают

2 голосов
/ 02 января 2012

Я использую проверку подлинности с помощью форм для веб-сайта 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 Ответ

3 голосов
/ 05 января 2012

Когда вы вызываете Redirect () или RedirectToAction (), вы прекращаете ответ, чтобы файлы cookie не отправлялись клиенту. Некоторые решения:

  1. Используйте TempData для сохранения информации по прямой линии, записав Cookie в действие, на которое вы перенаправляете.
  2. Посмотрите, как информация cookie cookie проверки подлинности с помощью форм записывается в коде NerdDinner в CodePlex .
  3. Как уже упоминалось в комментариях, вы можете сохранить информацию о роли в сеансе. Рекомендация хранить информацию о роли в сеансе и извлекать ее из ролей, если она не найдена, сработает, но я начну с использования системы членства «как есть» и настройки производительности позже, если вы увидите, что это проблема, а не предположите, что она будет .
...