Доступ к файлам cookie через JSONP - PullRequest
8 голосов
/ 22 ноября 2010

У меня есть страница в domain.com, которая отправляет запрос JSONP ajax (используя функцию jQuery .getJSON()) на URL в anotherdomain.com. Я подумал (читай: предположил), что ресурс в anotherdomain.com будет иметь доступ на стороне сервера к любым файлам cookie, установленным в этом домене, но это не так?

Вызов ajax выполняется специально для доступа к конкретному куки-файлу, выполнения некоторых манипуляций с данными и возврата богатого набора информации, основанной на значении куки-файла. Исходный домен не имеет прямого доступа к значению cookie, поэтому я подумал, что запрос ajax будет поддерживать нужное мне состояние.

Какую важную информацию о файлах cookie я пропускаю? Я устал и просто не вижу этого.

Спасибо.

UPDATE

Я нашел способ сделать это, но, на мой взгляд, он выглядит как 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 ]

10 голосов
/ 23 ноября 2010

Та же политика происхождения применяется ко всем запросам ajax, поэтому, если доступ к домену при вызове ajax отличается от домена, загруженного в браузер (document.host), все файлы cookie, связанные с доменом в запрошенном URL не будет отправлено. Поэтому подход JSONP работает, потому что он записывает в окно новый тег сценария, который будет вести себя так же, как любой запрос ресурса, который браузер может сделать, во внешний домен (следовательно, передавать все файлы cookie, связанные с доменом, в URL). Я также подтвердил это, просто позвонив по номеру $.post("http://atdmt.com") с моей консоли Chrome, находясь на stackoverflow.com в браузере (единственный другой домен, в котором были cookie в моем браузере, при написании ответа), и он не отправлял файлы cookie. в заголовках запроса.

Другим решением для решения проблемы поддержания состояния для anotherdomain.com было бы anotherdomain.com , устанавливающее первый файл cookie (не устанавливая атрибут домена домена cookie) и когда ajax / json-запрос направляется на anotherdomain.com доступ к этим cookie-файлам через javascript и отправку их по запросу с использованием стандартных параметров HTTP.

Надеюсь, я помог.

1 голос
/ 22 марта 2013

Я сталкивался с такой же проблемой раньше. Проблема, которую я обнаружил, заключается в том, что большинство браузеров не позволяют вам УСТАНОВИТЬ сеанс (т.е. установить cookie сеанса), когда не соблюдается та же политика происхождения.

...