Ответ 1
сервер должен установить заголовок:
response.Headers.Add("Access-Control-Allow-Credentials", "true");
клиент настроен на:
xhrFields: {
withCredentials: true
}
Приложение 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);
Первый ответ сервера пытается установить 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
в значение 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-запросах.