フォーム認証と Cookie を使用する MVC4 Web アプリケーションを開発しました。私が始めてから(数年)、すべてのブラウザで問題なく動作しました。
Microsoft 仮想ボックスから IE11 を使用してこのサイトをテストしようとしましたが、ログイン プロセスが機能しません。ログインをクリックしても何も起こらず、認証されていないかのようにログイン ページにリダイレクトされます。
最初は、Cookie の有効期限が切れているためだと思っていましたが、一時ファイルで確認できるように、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);
}
私はajax経由でサインインしていないので、チェーンを委任するだけのカスタムAuthorizeAttributeを作成しました。
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 を削除すると、システムはログインを試みますが、ユーザー名がないため失敗します。これを元に戻すと、何も起こりません。