Приложение 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.
сервер должен установить заголовок:
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-запросах.