Доступ к файлам cookie через JSONP

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

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

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

Спасибо.

ОБНОВЛЕНИЕ

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

person Rob Wilkerson    schedule 22.11.2010    source источник
comment
Я уверен, что вы, возможно, трижды проверили это, но насколько вы уверены, что файл cookie был установлен на домене otherdomain.com? Кроме того, каково состояние устанавливаемого файла cookie, например срок действия, путь и т. д.   -  person Salman Paracha    schedule 22.11.2010
comment
Да. Если я уведомлю целевой URL-адрес перед вызовом ajax, а затем загружу целевой URL-адрес в новую вкладку, я получу именно то, что ожидаю получить. Кажется, что вызов Ajax более оторван от сеанса браузера, чем я думал.   -  person Rob Wilkerson    schedule 23.11.2010
comment
Попробуйте вызов $.ajax с типом json и посмотрите, какие результаты вы получите. Кстати, ваш подход JSONP был задокументирован stackoverflow.com/questions/1421245/ и работал для кого-то еще   -  person Salman Paracha    schedule 23.11.2010
comment
Спасибо за новость, Салман. Этот вопрос никогда не возникал в моих поисках, но похоже именно то, что я пытаюсь сделать. Я не знаю, почему это не работает для меня. Обычный вызов JSON не будет работать, поскольку это междоменный запрос.   -  person Rob Wilkerson    schedule 23.11.2010
comment
Роб, можешь объяснить, как ты это делаешь? Это относится к фрагменту сценария внизу вопроса? Работало ли встраивание сценариев в фактический HTML, а не использование вызова jQuery $.getJSON? Оба метода работают, когда я принимаю сторонние файлы cookie, проверенные в FF, но ни один из них не работает, когда он не отмечен.   -  person andrewtweber    schedule 17.08.2011


Ответы (2)


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

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

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

person Salman Paracha    schedule 23.11.2010

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

person Joey Novak    schedule 22.03.2013