2

DoLoginと呼ばれるメソッドを公開するASP.NETWebサービスがあります

[WebService(Namespace = "http://rtns.ism.ec/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]    
[ScriptService]
public class UserManagerService : WebServiceBase
{

    [WebMethod(EnableSession=true)]
    [ScriptMethod]
    public ResponseBase<bool> DoLogin(LoginCredentials Credentials)
    {
        Credentials.IpAddress = HttpContext.Current.Request.UserHostAddress;
        Credentials.ServerID = Environment.MachineName;
        Credentials.SystemID = WebConfigurationManager.AppSettings["SYSTEM_ID"];
        Credentials.UserAgent = HttpContext.Current.Request.UserAgent;

        try
        {
            DataResponse<User> resp = UserManager.LoginUser(Credentials);

            if (resp.Code)
            {
                FormsAuthentication.SetAuthCookie(Credentials.Email, true);
                HttpContext.Current.Session.Add(Constants.Identifiers.USER_SESSION_INFO_IDENTIFIER, resp.Data);
            }
            return resp;
        }
        catch (Exception _ex)
        {
            ISM.Essentials.Business.LogManager.SaveLog(_ex);
            return new ResponseBase<bool> { Message = MessageManager.Instance[Constants.Messages.E_GENERIC_FAILURE, Credentials.CultureID] };
        }
    }

}

私はJQueryクライアントを持っています。それは呼び出しを行います:

function loginSubmitHandler() {

    var objeto = {
        Email: $('#txtUser').val(),
        Password: $('#txtPassword').val(),
        CultureID: $('#hddCulture').val()
    };

    utils.startAjaxCall('../Services/UserManagerService.asmx/DoLogin', { Credentials: objeto }, function(data) {

    if (data.d.Code) {
        window.location.replace('home.aspx');
    }
    else
    {
        utils.alert(locals.Information, locals.Accept, data.d.Message);            
    }
    });

    return false;
}

間違った資格情報でログインすると、サーバーから送信されたメッセージを含むアラートが表示されます。正しいクレデンシャルを指定すると、ページはhome.aspxにリダイレクトされます

このコードは、次のブラウザで開始されて以来、100%正常に機能しています。

  • IE6、7、8、9
  • Mozilla
  • IE9 Windows Phone
  • Android2.3ブラウザ
  • Windows用Safari5.1

私は(初めて)Macを手に入れましたが、自分のWebサイトにアクセスしようとすると、奇妙な動作に気づきました。正しいログインクレデンシャルを指定すると、ホームにリダイレクトされますが、FormsAuthenticationメカニズムがログインページにリダイレクトされます。

サーバーから返されたAuthcookieは無視されているようです。

同じWebアプリケーション/ドメイン内のWebサーバーを呼び出しているため、これはクロスドメインCookieの問題ではありません。

Safari for MacがAjaxWebサービス呼び出しで返されたCookieを受け入れるようにする方法についてのアイデアはありますか?

4

1 に答える 1

3

問題は、サファリが非ASCII文字でCookieを設定しないことである可能性があります。Cookieの値に対してencodeURIComponent()関数を使用してみてください。同様の問題のリンクは次のとおり です。SafariとAsp.netのCookieに関する奇妙な問題

于 2012-07-19T10:27:37.177 に答える