2017-01-27 2 views
1

Я не мог придумать подходящего названия.Крест, куки и сеанс

У меня есть два веб-сайта под моим контролем. Домен A и домен B. Домен B устанавливает весь необходимый заголовок CORS для домена A.

Домен A делает запрос ajax в домен B. С помощью этого запроса создается сеанс в домене B, и cookie с jsessionid отправляется обратно ,

Домен A делает другой запрос ajax только что полученным cookie. Некоторое значение устанавливается на сеансе домена B. Это работает, как ожидалось.

Затем, когда я открываю новую вкладку и просматриваю домен B, браузер не отправляет cookie из запросов ajax. Почему это?

Является ли cookie от ajax запросов только временно действительными и действителен только для запросов ajax?

Дополнительное тестирование

Вышеописанное поведение относится к IE 11. Я просто сделал тест в последней Chrome и он не работает. Никакое cookie не отправляется с любыми последующими запросами ajax.

Пример запроса:

$.ajax({ 
    url: url, 
    success: function() { 
     // do something 
    }, 
    xhrFields: { 
     withCredentials: true 
    } 
}); 

ответ

1

Попробуйте установить withCredentials флаг, делая ваши AJAX запросы:

$.ajax({ 
    url: 'http://www.domainb.com/some-resource', 
    type: 'GET', 
    xhrFields: { withCredentials: true }, 
}); 

Это заставит браузер сохраняться печенье, которое было установлено при запросе перекрестного домена и отправлять его автоматически при последующих вызовах.


UPDATE:

У меня есть установка рабочий пример здесь: https://jsfiddle.net/bhL0vqe3/4/

+0

Как я уже сказал, второй запрос работает. Файл cookie устанавливается на втором запросе. Я устанавливаю withCredentials для всех запросов ajax. Я подозреваю, что файлы cookie сохраняются только для запросов ajax, а не для «обычных» запросов. Это мой вопрос. – T3rm1

+0

Имеет ли сервер в домене B также заголовок ответа 'Access-Control-Allow-Credentials' для' true'? Не могли бы вы показать точные запросы и ответные нагрузки, которые отправляются по кабелю во время этого рабочего процесса? –

+0

Да, в противном случае второй запрос будет отличаться. – T3rm1

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