代码之家  ›  专栏  ›  技术社区  ›  Rob Wilkerson

通过jsonp访问cookie

  •  8
  • Rob Wilkerson  · 技术社区  · 15 年前

    我有一页在里面 domain.com 它发出一个jsonp-ajax请求(使用jquery的 .getJSON() 函数)到中的URL anotherdomain.com . 我认为 另一个域名.com 服务器端是否可以访问该域中设置的任何cookie,但情况似乎并非如此?

    Ajax调用专门用于访问特定的cookie、进行一些数据操作并返回一组由cookie值键控的丰富信息。原始域不能直接访问cookie值,所以我认为Ajax请求将保持我需要的状态。

    我忽略了哪些关于cookies的关键信息?我筋疲力尽,只是看不见而已。

    谢谢。

    更新

    我找到了一种方法,但在我看来,它看起来像jsonp,所以我想知道为什么这种方法在Ajax版本不工作的情况下有效。请求是否只是与浏览器会话断开连接,这样就无法访问cookie?

    <script type="application/x-javascript" src="<?php echo $service_url . '&callback=interests' ?>"></script>
    <script type="text/javascript">
      function interests( data ) {
        $( function() {
          var c_behaviors = data.length;
          var ids         = [];
    
          for( var i = 0; i < c_behaviors; i++ ) {
            ids.push( data[i].behavior_id );
          }
    
          $('body').append( '<p><label>Returned:</label> ' + ids.join( ', ' ) + '</p>' );       
        });
      }
    </script>
    
    2 回复  |  直到 13 年前
        1
  •  10
  •   Salman Paracha    15 年前

    The same origin policy applies 对于所有Ajax请求,因此如果在Ajax调用中访问的域与浏览器(document.host)中加载的域不同,则不会发送与请求的URL中的域相关联的所有cookie。因此,jsonp方法之所以有效,是因为它在窗口中编写了一个新的脚本标记,其行为类似于浏览器向外部域发出的任何资源请求(从而传递URL中与该域相关联的所有cookie)。我也通过简单的电话确认了这一点 $.post("http://atdmt.com") 在浏览器中的stackoverflow.com上(在我的浏览器中唯一一个有cookie的域,在写入答案时),它没有在请求头中发送任何cookie。

    另一个解决方案是绕过维护状态的问题 另一个域名.com 会有 另一个域名.com 设置第一方cookie(通过不设置cookie的域属性)以及在向Ajax/JSON请求时 另一个域名.com 通过javascript访问这些cookie,并使用标准的HTTP参数将它们推到请求上。

    希望我能帮上忙。

        2
  •  1
  •   Joey Novak    13 年前

    我以前也遇到过同样的问题。我发现的问题是,当不满足同一源站策略时,大多数浏览器都不允许您建立会话(即设置会话cookie)。

    推荐文章