我開發了一個使用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,那麼系統會嘗試登錄,但它會因爲沒有用戶名而彈出。當我把它放回沒有任何反應時。
非常感謝。我不能在本週看到假期,但一回到我就會放手。 – dreza