2013-04-14 50 views
0

我有一个控制器上Logout action像这样:ASP.NET MVC注销与窗体身份验证

public ActionResult Logout() 
{ 
    FormsAuthentication.SignOut(); 
    Session["UserCredential"] = null; 
    return RedirectToAction("Index", "Home"); 
} 

该工作在谷歌Chrome浏览器。但是当我在第一次登录和注销后使用我的web应用程序和firefox浏览器(最新版本)时。当我再次登录到应用程序并按下注销按钮时,我无法从Web应用程序注销。 Request.IsAuthenticated正在给我真正的价值。

对于登录我用以下行动:

 [HttpPost] 
     public JsonResult Login(string userName, string password) 
     { 

      User oUser = oRepository.GetUser(userName,password); 
      Session["UserCredential"] = oUser; 


      if (oUser != null) 
      { 
       if (oUser.IsVerified) 
       { 
        string url = Request.Url.AbsolutePath;  
        FormsAuthentication.SetAuthCookie(userName, false); 
        return Json(new { res = 1, RedirectUrl = Url.Action("Index", "Home") }, JsonRequestBehavior.AllowGet); 
       } 
       else 
       { 
        return Json(new { res = 0, RedirectUrl = "" }, JsonRequestBehavior.AllowGet); 
       } 
      } 

      return Json(new { res = -1, RedirectUrl = "" }, JsonRequestBehavior.AllowGet); 
     } 

任何人有知道我必须做的解决我用firefox浏览器的问题。

+0

浏览器控制台中的任何错误? –

+1

没有。实际上在注销按钮按它调用主控制器的索引操作。 –

+0

然后你解决了你的问题 –

回答

2

我不是100%确定,但你可以试试这个。

我发现在ASP.NET中实现FormsAuthentication的方式,SignOut方法不能清除ASPXAUTH cookie。所以,在退出时,我通常会做的是手动清除响应中的所有cookie。

你可能会尝试这样做。至少,在你的情况下,你应该清除2个cookies:

1)FormsAuth cookie。您可以通过访问FormsAuthentication类的CookieName(或某些此类)静态字段来获取cookie的名称。

2)ASP.NET会话cookie。检查立即窗口(打印Cookies集合)中的cookie名称。

要清除cookie,只需将新cookie添加到响应对象的cookie集合中,其名称与旧cookie相同,然后将其到期日期设置为过去的日期。

+0

感谢@Water Cooler v2的帮助。你的答案为我解决了我的问题。 –