2012-04-13 4 views
4

Я портирую клиентскую библиотеку для API от JSONP до CORS. Я установил все правильные заголовки на сервере и выполнил все указанные действия в клиенте, но у меня есть проблема с файлами cookie. Этот API-метод auth работает с файлами cookie. С помощью JSONP он сделал запрос GET API с ключом API в качестве параметра. Затем сервер устанавливает cookie на api.io.holalabs.com (URL API), поэтому в следующий раз, когда он вызывает вызов API, сервер запрашивает файл cookie и делает логин. Проблема в том, что, хотя я вижу Set-Cookie в заголовках, cookie не установлен на api.io.holalabs.com, поэтому логин завершается с ошибкой. Это мои заголовки:Настройка файлов cookie через запрос CORS

Access-Control-Allow-Credentials:true 
Access-Control-Allow-Headers:Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version 
Access-Control-Allow-Methods:GET 
Access-Control-Allow-Origin:http://holalabs.com 
Access-Control-Expose-Headers:X-Api-Version, X-Request-Id, X-Response-Time 
Connection:close 
Content-Length:13 
Content-MD5:RjkY1fW5i5MKifxPk+r4tg== 
Content-Type:application/json 
Date:Fri, 13 Apr 2012 16:06:56 GMT 
Server:nginx/1.0.14 
Set-Cookie:apikey.sig=DYyrzLFUfJSjsmK5crkxHQg-rxQ; path=/; httponly 
X-Api-Version:1.0.0 
X-Request-Id:c78b4223-1caf-42db-a99e-b075bdc10ea5 
X-Response-Time:2 

EDIT: Использование куки в API это ужасная идея, так что теперь мы используем заголовок авторизовать пользователя. Проблема закрыта!

+1

В каком заголовке вы использовали? 'Аутентификация: база ....'? – pabera

ответ

0

Выпуск якобы закрыт, но если кто-то сталкивается с этой проблемой и нужно использовать печенье, вот один из возможных объяснений и решение:

Объяснение

идентификатор сеанса передается в виде печенья, а так запрос является междоменным, он считается сторонним файлом cookie браузером. Некоторые браузеры будут блокировать сторонние файлы cookie, и сеанс будет потерян.

Решение

Генерирование идентификатор сеанса на клиенте (в браузере), используйте Javascript sessionStorage для хранения идентификатора сеанса затем отправить идентификатор сеанса при каждом запросе к серверу.

(Подробности: Javascript Cross-Domain Request With Session)

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