2

フォーム認証と 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 を削除すると、システムはログインを試みますが、ユーザー名がないため失敗します。これを元に戻すと、何も起こりません。

4

1 に答える 1

6

web.config ファイルcookieless="UseCookies"の要素で属性を使用してみてください。formsこれで問題は解決するはずです。詳細については、ここを参照してください。

http://gyorgybalassy.wordpress.com/2013/09/23/aspnet-40-forms-authentication-issues-with-ie11/

于 2013-10-24T12:57:06.700 に答える