【问题标题】:ASP.NET Forms Authentication Cookie not set in SafariASP.NET 表单身份验证 Cookie 未在 Safari 中设置
【发布时间】:2012-07-12 18:20:11
【问题描述】:

我有一个 ASP.NET Web 服务,它公开了一个名为 DoLogin 的方法

[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 手机
  • Android 2.3 浏览器
  • 适用于 Windows 的 Safari 5.1

我刚买了一台 Mac(有史以来第一次),当我尝试访问我的网站时,我注意到了一种异常行为。我提供了正确的登录凭据,我被重定向到主页,但 FormsAuthentication 机制重定向回登录页面。

似乎只是忽略了从服务器返回的 Auth cookie。

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

关于如何让 Mac 版 Safari 接受 Ajax Web 服务调用中返回的 cookie 有什么想法吗?

【问题讨论】:

  • 您是否尝试过编写自己的 cookie 并设置其过期时间??stackoverflow.com/questions/4939533/…
  • @Gabobcat 我会尝试看看会发生什么。我也很好奇 Safari 中 cookie 的 ascii 限制。

标签: asp.net ajax cookies safari forms-authentication


【解决方案1】:

问题可能是 safari 不会使用非 ASCII 字符设置 cookie。尝试对 cookie 值使用 encodeURIComponent() 函数。这是一个有类似问题的链接: Strange problem with cookies in Safari and Asp.net

【讨论】:

    猜你喜欢
    • 2013-09-16
    • 2018-03-30
    • 1970-01-01
    • 2014-04-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多