MVC 3饼干不工作

问题描述:

我使用MVC网站的表单身份验证,我有一个问题,添加饼干,我使用加密的表单身份验证票并将其添加到Cookie,但在检查我的饼干时,它是在那里(由命名“AuthCookie”),但价值总是空和过期日期始终设置为“01/01/0001 00:00” ......这是我的登录控制器代码:MVC 3饼干不工作

[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

是否有你没有使用FormsAuthentication.SetAuthCookie()的原因? – rfmodulator 2012-01-02 00:13:26

+0

使用SetAuthCookie()你没有访问userData ...我将用它来存储UserRole和其他可选数据IPrincipal和IIdentity – 2012-01-02 00:15:52

+1

我明白了。我不确定是否将角色数据存储在客户端上是一个好主意。 :)加密或以其他方式。 – rfmodulator 2012-01-02 00:17:35

当你呼叫重定向()或RedirectToAction(),你终止响应,因此Cookie不会发送到客户端。某些解决方案:

  1. 使用TempData将信息持续存储在直接页面中,将Cookie写入您重定向到的操作中。
  2. 查看表单身份验证Cookie信息写入NerdDinner code on CodePlex的方式。
  3. 正如评论中所述,您可以在Session中保留角色信息。将角色信息存储在Session中并从角色中检索(如果未找到)的建议可能会奏效,但我会先按照原样使用成员资格系统,然后再调整性能,如果发现问题存在,而不是假定它会成为问题。
+0

我现在正在使用上面提到的自定义角色提供程序,这已经很好地解决了我的角色问题。作为regrads设置我的身份验证票,我看着书呆子晚餐的例子(谢谢你),它看起来像这只是设置身份验证cookie的方式是: 验证用户... 设置身份验证Cookie .. 重定向到请求的原始页面... – 2012-01-10 11:21:05

+0

@JonGalloway。解决方案编号为3的问题是,您无法通过“AuthenticateRequest_handler”进行会话,通常用于设置Thread.CurrentPrincipal(您需要角色)。 – tggm 2012-07-24 10:48:56