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を受け入れるようにする方法についてのアイデアはありますか?