2015-01-14 52 views
0

//接口 - 注入控制器无法删除注销饼干

public interface IContext 
{ 
    HttpRequestBase Request { get; } 
    HttpResponseBase Response { get; } 
} 

//实现

public class Context : IContext 
{ 
    public HttpRequestBase Request { get { return new HttpRequestWrapper(HttpContext.Current.Request); } } 
    public HttpResponseBase Response { get { return new HttpResponseWrapper(HttpContext.Current.Response); } } 
} 

//在登录时设置的Cookie。 SetCookie(_context,login);

public void SetCookie(IContext context, Login login) 
{ 
     var loginDetails = new JavaScriptSerializer().Serialize(login); 
     var cokie = new HttpCookie("login", login); 
     context.Response.Cookies.Add(cokie); 
} 

//尝试注销。

public ActionResult Logout() 
    { 
     foreach (var key in _context.Request.Cookies.AllKeys) 
     { 
      try 
      { 
       _context.Response.Cookies.Remove(key); //this didn't work 

       //tried this even this is not working 
       var login = new Login {Identity = "", LogIn = false}; 
       _login.SetCookie(_context, login); 
      } 
      catch (Exception e) 
      { 
      } 
     } 
     _context.Response.Cookies.Clear(); //this didn't work either 

     return RedirectToAction("Index", "Login"); 
    } 

在登录索引当我检查当前登录cookie值时,它始终将登录用户的值设置为空或空。 我怀疑IContext的实施有什么问题。它应该有一个setter?不知道..

也试过:

 var cokie = context.Request.Cookies["login"]; 
     cokie.Expires = DateTime.Now.AddDays(-2); 
     cokie.Value = null; 
     context.Response.Cookies.Add(cokie); 

回答

1

如果您使用表单身份验证,则可以使用下面的代码。这将清除所有需要的饼干

FormsAuthentication.SignOut(); 
Session.Abandon(); 

或者您可以使用

Session.Abandon(); 
Response.Cookies.Clear(); 

YourCookies.Expires = DateTime.Now.AddDays(-1d); 

欲了解更多信息,请访问

MSDN Cookie Help

0

在您使用

SignInManager.PasswordSignInAsync(...) 

如果登录用户,你可以尝试

AuthenticationManager.SignOut(); 

,而不是

_context.Response.Cookies.Clear();