2015-01-14 55 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();