ASP.NET窗体身份验证Cookie在Safari

问题描述:

没有设置我有它公开了一个名为DoLoginASP.NET窗体身份验证Cookie在Safari

[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的客户端,这使得调用方法的ASP.NET Web服务:

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; 
} 

当我使用icorrect凭证登录时,将显示带有从服务器发送的消息的警报。如果我给正确的凭据,该页面将被重定向到home.aspx

此代码工作100%的罚款,因为在以下浏览器开始时:

  • IE6,7,8,9
  • 的Mozilla
  • IE9的Windows Phone
  • Android 2.3的浏览器
  • 的Safari 5.1的Windows

我刚刚得到了一台Mac(首次),当我试图访问我的网站时,我注意到了一个引爆行为。我给了正确的登录凭据,我被重定向回家,但FormsAuthentication机制重定向回登录页面。

好像从服务器返回的Auth cookie被忽略。

这不是交叉域cookie的问题,因为我在同一个Web应用程序/域中调用Web服务器。

关于如何让Safari for Mac接受在Ajax Web Service调用中返回的cookie的任何想法?

+0

您是否尝试过写自己的cookie,并设置其到期?? HTTP://*.com/questions/4939533/cookie-confusion-with-formsauthentication-setauthcookie-method – 2012-07-18 22:11:38

+0

@Gabobcat我会试着看看会发生什么。我也很好奇Safari中cookies的ascii限制。 – 2012-07-19 18:02:02

问题可能是Safari浏览器不会将cookies设置为非ASCII字符。尝试对cookie值使用encodeURIComponent()函数。下面是类似的问题的链接: Strange problem with cookies in Safari and Asp.net

+0

它工作。谢谢 – 2012-07-24 02:54:38