2015-11-09 3 views
0

У меня возникли проблемы с получением информации cookie из домена A в домен B, используя jsonp. У меня есть работа для Chrome и Firefox и др., Но для IE это не работает. Я делаю запрос jsonp из домена B в домен A, который устанавливает cookie там через php в домене A, а затем я снова проверяю тот же файл cookie из B. Затем информация в cookie печатается на экран (домен A), поэтому я могу выбрать это из домена B и установить там cookie, который отражает эту информацию (я знаю о рисках безопасности, я не пытаюсь синхронизировать чувствительные информация здесь, только настройка).Получение значений cookie для перекрестного домена с использованием jsonp, не работающего для IE

Итак, как говорится, это работает на FF, Chrome и т. Д. Но в IE я вижу, что возвращаются только файлы cookie сеанса, которые я установил, не является (и не должен быть).

Не знаете, что здесь не так? Или это даже не возможно? Я также кратко попробовал CORS, но это имеет ту же проблему.

У меня есть следующие настройки: тестовый

Домен: (центральный домен)

login.php

<?php 
//below line solves the problem. See accepted answer 
header('P3P: CP="Facebook does not have a P3P policy. Learn why here: http://fb.me/p3p"'); 
setcookie("loggedin","5",time()+3600); 
echo 1; 

check.php

<?php 
//below line solves the problem. See accepted answer 
header('P3P: CP="Facebook does not have a P3P policy. Learn why here: http://fb.me/p3p"'); 
$cookies = implode('; ', array_map(function ($v, $k) { return $k . '=' . $v; }, $_COOKIE, array_keys($_COOKIE))); 

if(isset($_COOKIE['loggedin'])&&($_COOKIE['loggedin'] == "5")) { 
     echo "alert('logged in, ".$cookies."');"; 
} else { 
     echo "alert('not logged in, ".$cookies."');"; 
} 

Домен Б:

jsonp.html

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
</head> 
<body> 
<h1>hi!</h1> 
<script> 
     jQuery.ajax({ 
       url: 'http://cookies.hidev.nl/login.php', 
       dataType: 'jsonp', 
       type: "get", 
     }); 
     //note: first call will set the cookie, next succeeds only after reload due to async loading. This is only for test purposes 
     jQuery.ajax({ 
       url: 'http://cookies.hidev.nl/check.php', 
       dataType: 'jsonp', 
       type: "get" 
     }); 

</script> 
</body> 
</html> 

ответ

0

В конце концов, все это сводилось к добавив заголовок P3P политики в сценарии. Для этого я использовал P3P хак, используемый Facebook:

header('P3P: CP="Facebook does not have a P3P policy. Learn why here: http://fb.me/p3p"'); 

Важной вещь, чтобы отметить, что я думал, что P3P дал вам доступ к печенью на другой домен. Это не совсем верно. У вас есть доступ к файлам cookie, которые также устанавливаются с заголовком P3P. Моя живая настройка немного сложнее, и в некоторых случаях файлы cookie были установлены в домене A без P3P, а не через дополнительный домен (например, B в моем примере). В этом случае я не мог прочитать файлы cookie из домена B.

Я изменил приведенный выше пример, чтобы отразить решение. Разумеется, измените текст на что-то подходящее и убедитесь, что вы случайно не используете слова, эквивалентные компактным кодам (например, LAW, NON и т. Д.).

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

Смежные вопросы