Сохранение файла cookie после запроса ajax для междоменного доступа

Приложение javascript, запущенное на 10.0.0.1 пытается аутентифицировать своих пользователей с помощью междоменных вызовов ajax.

Запрос выглядит так:

 function test(again){ $.ajax({ type: 'GET', url: 'http://example.com/userinfo', dataType: 'json', success: function(userinfo){ if(again) test(false);}});} test(true); же function test(again){ $.ajax({ type: 'GET', url: 'http://example.com/userinfo', dataType: 'json', success: function(userinfo){ if(again) test(false);}});} test(true); 

Первый ответ сервера пытается установить файл cookie:

 Access-control-allow-origin:http://10.0.0.1 Set-Cookie:PHPSESSID=uuj599r4k1ohp48f1poobil665; expires=Sat, 28-Jan-2012 17:10:40 GMT; path=/ 

Но второй запрос не включает этот файл cookie и другие запросы ajax в этот домен.

Я не пытаюсь прочитать cookie для другого домена, я просто хочу, чтобы приложение в другом домене могло устанавливать и читать его собственный файл cookie.

Это возможно?

Я тестировал в Chrome и Firefox 9.

Related of "Сохранение файла cookie после запроса ajax для междоменного доступа"

сервер должен установить заголовок:

 response.Headers.Add("Access-Control-Allow-Credentials", "true"); 

клиент настроен на:

 xhrFields: { withCredentials: true } 

Если вы используете браузер, который поддерживает CORS, файлы cookie на запрос AJAX должны работать. Но вы должны установить withCredentials на XMLHttpRequest withCredentials true.

См .: атрибут withCredentials

Я не использую JQuery, но вот вопрос, который конкретно касается установки withCredentials через JQuery.

Отправка учетных данных междоменными сообщениями?

Нет, файлы cookie не могут быть разделены между доменами. Такую же политику происхождения можно обойти для вызовов AJAX, используя заголовки Access-Control-* предполагая, что браузер поддерживает их, но для файлов cookie нет никакого способа.

+ Дарин Димитров подозревает, что «файл cookie не сохраняется браузером, потому что он исходит из другого домена, чем тот, который размещает страницу, которая находится в начале этого вызова».

Однако cookie устанавливается по желанию при использовании JSONP, но JSONP предназначен только для запросов GET.

Мое решение состоит в том, чтобы извлечь файл cookie (идентификатор сеанса PHP), загрузив следующий файл php в <script> :

 <? echo $_GET['callback'] . '("' . session_id() . '")'; ?> 

И передать идентификатор сеанса в качестве переменной запроса во всех междоменных POST-запросах.