0

セットアップは、JSON API として機能するように Rails アプリを 1 つセットアップし、API を呼び出すために使用する別の静的 HTML ページを用意しました。議論のために、Rails API は foo.com にあり、静的な html ページは bar.com にあります。

foo.com アプリでは、次のようなものがあります。

    if !cookies[:foo]
      cookies[:foo] = "testing #{rand(500)}"
    else
      logger.info(cookies[:foo])

    render :json => { :cookie => cookies[:foo] }

bar.com から jquery を使用して ajax GET リクエストを実行しようとすると、Cookie が JSON API に送り返されません。

    $.get('http://foo.com/', function(data){console.log(data)})

しかし、ページにリソースをロードすると、cookie を取得して foo.com と bar.com の間を行き来させることができます。

    <script type="text/javascript" src="http://foo.com"></script>

単純な ajax リクエストを実行するときではなく、スクリプトをスクリプト リソースとしてロードするときに、クロスドメイン間で Cookie をやり取りできる理由を知っている人はいますか? これを回避する方法はありますか?

4

2 に答える 2

2

ajax呼び出しがクロスサイトで$.ajaxあるため、リクエストを行う必要があるときに使用します。JSONP

$.ajax({
  url: "xxxx",
  crossDomain : true,
  dataType    : 'json',//if response is in JSON Notation
  success     : function (result){
   alert(result);
  }
});
于 2012-11-20T06:24:03.457 に答える
0

技術者が言ったように、クロスドメインを有効にするには、$.ajax を使用して json(p) リクエストを行う必要があります。

ただし、この種の実装では Cookie は扱いにくいものです。何らかのハックを使用して Cookie を送受信できたとしても、古い (または安価な) ブラウザーはそれらをブロックします。

*咳* IE *咳*

これを「ハック」する簡単な方法は、次のように URL に Cookie を渡すことです。

$.ajax({
  url: "//domain.com/path/to/stuff;cookie1=value1?someParameter2=value2",
  crossDomain : true,
  dataType    : 'json',//if response is in JSON Notation
  success     : function (result){
   alert(result);
  }
});

この例では、リクエストの Cookie 名が「cookie1」で値が「value1」で、GET パラメータの値が「value2」であることをサーバーに伝えています。

お役に立てれば。

于 2013-01-31T20:38:00.487 に答える