【问题标题】:internet explorer ajax request not authenticatedInternet Explorer ajax 请求未通过身份验证
【发布时间】:2011-09-21 13:26:00
【问题描述】:

我的应用程序工作流程是这样的:用户通过身份验证,他们开始游戏,一段时间后我发出 ajax 请求以获取一些数据,但这个请求也通过了身份验证。

问题是,当第一个 ajax 请求发出时,Internet Explorer 将用户视为未经身份验证并强制重定向,一切正常。

这个问题只出现在 Internet Explorer 上。

有什么想法吗?

【问题讨论】:

    标签: ajax facebook internet-explorer authentication iframe


    【解决方案1】:

    如果您的应用程序在 IFRAME 中运行,那么您应该设置 P3P 标头以启用 cookie。

    您应该在第一个响应中发送一个特殊的 HTTP 标头:

    P3P: CP="ALL DSP COR CURa ADMa DEVa OUR IND COM NAV"
    

    这应该可以解决 IE 的问题,但您可能会在 Chrome 和 Safari 中遇到同样的问题。它仅在用户第一次访问您的应用时出现。您可以通过使用浏览器清理功能清除浏览器中的所有个人信息来模拟它。

    我通过将初始 signed_request 属性存储到 Javascript 变量并将其作为附加 HTTP 标头在所有 AJAX 请求中发送来解决了这个问题(如果您使用 jQuery 则可以)。此外,我为所有链接和表单添加了相同的属性。

    示例代码:

    var signed_request = '...'; // My signed request goes here
    
    ...
    
    function signedUrl(url){
      var url_parts = url.split('#', 2);
    
      var new_url = url_parts[0] + (url_parts[0].indexOf('?') == -1 ? '?' : '&') + 'stored_signed_request=' + signed_request;
    
      if(url_parts.length == 2) {
        new_url = new_url + '#' + url_parts[1];
      }
    
      return new_url;
    }
    
    ...
    
      if(document.cookie.indexOf('fbsr_') == -1){
        $('a').live('click', function(){
          var href = $(this).attr('href') || '';
    
          if(href !== ''){
            $(this).attr('href', signedUrl(href));
          }
        });
    
        $('form').live('submit', function(){
          $(this).append('<input type="hidden" name="stored_signed_request" value="' + signed_request + '">');
        });
    
        $.ajaxSetup({
          beforeSend : function(request){
            request.setRequestHeader('signed-request', signed_request);
          }
        });
      }
    

    【讨论】:

      猜你喜欢
      • 2021-08-04
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多