Доступ к куки в торнадо через ajax звонки в колбе - PullRequest
1 голос
/ 29 февраля 2012

Как и в обзоре, у меня есть приложение Flask, которое служит главным веб-сайтом, и приложение Tornado, которое служит сервером чата для веб-сайта, каждое из которых работает независимо от отдельного порта.

Приложение чата непосредственно читаетинформация о сеансе из колбы,

self.get_cookie(settings.SESSION_COOKIE_NAME)

Проблема, с которой я сталкиваюсь, заключается в том, что если я получаю доступ к серверу чата через браузер, сеанс будет прочитан, но с использованием вызова Ajax сеансnot.

Сервер чата предоставляет заголовок Access-Control-Allow-Domain для разрешения междоменного вызова.

Ajax очень прост,

$.getJSON('http://127.0.0.1:8888', {'message': 'test'}, function(){});

Домен cookie просто установлен на 127.0.0.1 и не является файлом cookie только HTTP.

Есть ли какая-то особая причина, по которой я могу получить доступ к cookie в моем браузере по адресу 127.0.0.1:8888, а незапрос Ajax?

1 Ответ

2 голосов
/ 01 марта 2012

http://code.google.com/p/jquery-jsonp/wiki/APIDocumentation

Из моего исследования выяснилось, что междоменные вызовы ajax НЕ отправляют информацию cookie в заголовках запросов, используя вышеупомянутую библиотеку, разрешенную для обходного пути.

Обратите внимание на этоаналогичен

Доступ к файлам cookie через JSONP

Кроме того, ответы JSONP ДОЛЖНЫ отправляться в завернутых параметрах GET обратного вызова, в противном случае выдается ошибка.

Uncaught SyntaxError: Unexpected token :

Например,

http://127.0.0.1:8888/chat/get_messages?callback=jsonp

Ответы

jsonp(
    {
        'data': '1',
        'result': true 
    }
)
...