asp.net-mvc-3 - MVC 3 Cookie 不起作用

标签 asp.net-mvc-3 cookies forms-authentication formsauthenticationticket

我正在为 MVC 网站使用表单例份验证,但在添加 Cookie 时遇到问题,我正在使用加密表单例份验证票并将其添加到 Cookie 中,但是在检查我的 cookie 时,它​​在那里(名称为“AuthCookie”)但值始终为空并且到期日期始终设置为“01/01/0001 00:00”...这是我的登录 Controller 代码:

[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);

}

起初,我认为加密字符串由于长度而无法正常工作,但我已经通过创建一个简单的测试库对此进行了测试,并且得到了相同的结果。

谁能帮忙

最佳答案

当您调用 Redirect() 或 RedirectToAction() 时,您将终止响应,因此 cookie 不会发送到客户端。一些解决方案:

  • 使用 TempData 通过直接保存信息,在您重定向到的操作中写入 Cookie。
  • 看一下Forms Authentication cookie信息在NerdDinner code on CodePlex中的写法.
  • 如评论中所述,您可以在 Session 中持久化角色信息。将角色信息存储在 Session 中并在未找到的情况下从 Roles 检索的建议会起作用,但是如果您发现这是一个问题,我将按原样使用成员(member)系统并稍后进行性能调整,而不是假设它会是.
  • 关于asp.net-mvc-3 - MVC 3 Cookie 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8696464/

    相关文章:

    c# - 如何在 ASP.NET MVC 3 中将 Razor View 呈现为字符串?

    php - 登录时在 Yii 框架中启用/禁用基于 cookie 的登录

    asp.net - 使用自定义 (asp.net) 表单的 NTLM 身份验证

    asp.net - 允许角色不起作用但允许用户在 web.config 中工作

    JSF 将数据存储到 cookie 中

    c# - 在 web.config 的 "domain"中指定 "authentication"参数后无法注销

    asp.net-mvc-3 - 如何在 MVC3 中构建复合 UI?

    asp.net - 播放嵌入在网站上的youtube时参数无效

    asp.net-mvc-3 - AntiForgeryToken 无需表单例份验证

    javascript - Angular cookie 在不同的 url 不返回相同的值