2

我開發了一個使用Forms身份驗證和Cookie的MVC4 Web應用程序。在所有瀏覽器中,自從我開始(幾年)以來,它都運行良好。登錄未在IE11中工作的網絡應用程序

我現在已經嘗試使用IE11從Microsoft虛擬框中測試此站點,並且登錄過程不起作用。當我點擊登錄時,什麼也沒有發生,我被重定向回登錄頁面,就好像我沒有通過身份驗證一樣。

起初我以爲是因爲cookie過期了,但是cookie被設置爲我可以在臨時文件中看到它。我的代碼似乎沒有做任何棘手的事情。

注:當我加入了網站兼容性視圖登錄過程的工作

這裏是登錄/曲奇代碼

public void SignIn(HttpResponseBase response, string userName, bool rememberMe) 
{ 
    if (String.IsNullOrWhiteSpace(userName)) 
      throw new ArgumentException("Value cannot be null or empty.", "userName"); 

    var ticket = new FormsAuthenticationTicket(
         1, 
         userName, 
         DateTime.Now, 
         DateTime.Now.AddMinutes(FormsAuthentication.Timeout.TotalMinutes), 
         rememberMe, 
         string.Empty); 

    var cookie = new HttpCookie(
         FormsAuthentication.FormsCookieName, 
         FormsAuthentication.Encrypt(ticket)); 
    cookie.HttpOnly = true; 

    if (rememberMe) 
    { 
     cookie.Expires = ticket.Expiration; 
    } 

    response.Cookies.Add(cookie); 
} 

我創建了一個自定義的AuthorizeAttribute,這應當只是委託了因爲我沒有通過ajax進行登錄。

public class OverseerAuthorizeAttribute : AuthorizeAttribute 
{ 
    protected override void HandleUnauthorizedRequest(AuthorizationContext context) 
    { 
     if (FormsAuthentication.IsEnabled) 
     { 
      if (context.HttpContext.Request.IsAjaxRequest()) 
      { 
       context.HttpContext.Response.AddHeader("REQUIRES_AUTH", "1"); 
       context.Result = new EmptyResult(); 
      } 
      else 
      { 
       base.HandleUnauthorizedRequest(context); 
      } 
     } 
     else 
     { 
      base.HandleUnauthorizedRequest(context); 
     } 
    } 
} 

如果我從控制器中刪除AuthorizeAttribute,那麼系統會嘗試登錄,但它會因爲沒有用戶名而彈出。當我把它放回沒有任何反應時。

回答

相關問題