2013-08-20 4 views
1

Я пытаюсь установить cookie браузера, используя вызов jQuery .ajax(), и он не работает.jQuery .ajax() не устанавливает cookie

console.log("before cookies:" + document.cookie); 
$.ajax({ 
    dataType: "json", 
    contentType: "application/json", 
    url: url, 
    type: "GET", 
    processData: false 
}).then(function (data) { 
    console.log("after cookies:" + document.cookie); 
}); 

На стороне сервера, система добавляет Set-Cookie в ответ:

Access-Control-Allow-Headers Origin, X-Requested-With, Content-Type, Accept 
Access-Control-Allow-Origin * 
Content-Length 63 
Content-Type application/json;charset=ISO-8859-1 
Expires Thu, 01 Jan 1970 00:00:00 GMT 
Set-Cookie myApiKey=testkey;Expires=Wed, 20-Aug-2014 18:11:57 GMT;Max-Age=31536000 

Выход пуст:

before cookies: 
after cookies: 

Вот руб. Главная страница находится в одном поддомене, а вызов ajax - другому (api.mydomain.com). Но я думаю, что правильно настроил заголовки CORS на серверной стороне. Он должен работать.

Firebug сообщает, что файл cookie настроен, но каким-то образом он не отображается на внешней странице. Какая уловка?

+5

Скорее всего, Ajax-вызов * устанавливает * файлы cookie, но устанавливает куки для * удаленного домена *, а не вашего домена. – apsillers

+2

Установили ли вы домен cookie на '.mydomain.com'? что сделает его доступным для чтения из любого поддомена –

+2

Если вы задаете «Domain = .mydomain.com» файла cookie, решает вашу проблему, у вас есть дубликат [Can subdomain.example.com установить cookie, который можно прочитать на примере. com?] (http://stackoverflow.com/questions/3089199/can-subdomain-example-com-set-a-cookie-that-can-be-read-by-example-com) (Если это * doesn ' t * решить проблему, тогда Ajax может ввести некоторую сложность, и это может быть не дубликат.) – apsillers

ответ

1

Оказалось, что это была проблема с доменом cookie с двумя завихрениями: у домена был номер порта, который должен был быть удален, а также на стороне сервера в этой настройке не было доступа к имени хоста запроса, только адрес ip, который перепутал другие вещи.

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

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