Кросс-доменные сеансы ajax и php - PullRequest
4 голосов
/ 21 января 2010

Я сбит с толку этим ... Я делаю установку типа удаленного виджета, мы будем контролировать оба домена, поэтому безопасность не имеет значения. Я использую jsonp для разрешения междоменных запросов ajax.

Посетил сайт domain1.com, который включает в себя:

<script src="domain2.com/file.js"></script>

file.js использует jQuery для выполнения ajax-запросов:

$.ajax({
   url: 'http://domain2.com/getdata',
   dataType: 'jsonp',
   success: function(response) {
       div.html( response );
   }
});

Он выполняет несколько из этих шагов в некотором роде мастера, перезагружая div с html с удаленного сервера.

Проблема, с которой я сталкиваюсь, заключается в том, что при каждом запросе ajax я получаю новый идентификатор сеанса php, и мои данные сеанса исчезают. Конец PHP в порядке, если я запускаю один и тот же скрипт из того же домена (все еще использующий jsonp), все работает нормально. Делая это из удаленного домена, однако, и сеанс не задерживается. Я понятия не имею, почему это так, php end устанавливает и запрашивает cookie из своего собственного домена. Мне не нужен доступ к куки из JS. Файл cookie записывается и сохраняется на сервере. Но при каждом запросе, когда я проверяю сохраненные куки в браузере, идентификатор сессии менялся.

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 21 января 2010

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

Фактическое приложение использует cakephp и их сессии. Я попытался переключиться на использование только $ _SESSION, но ничего не вышло. Я попытался добавить session_start () к контроллеру, не сработало. Наконец я отключил сеансы cakephp в конфиге, и теперь он работает просто отлично.

Я понятия не имею, почему это не сработало, но, похоже, сбой с cakephp.

0 голосов
/ 21 января 2010

Извините, я не читал, что вы используете jsonp. Так что это не решение ...

С Javascript вы не можете выполнять AJAX-вызовы в домене, отличном от домена, на котором работает ваш сайт. Это называется «Политика одного источника» и обеспечивает большую безопасность в случае возникновения проблем XSS на вашем сайте. См. Статью Wikipedia для получения дополнительной информации: http://en.wikipedia.org/wiki/Same_origin_policy Предоставляя на своем сервере скрипт php маршрутизации, вы можете направлять эти вызовы Javascript AJAX через ваш сервер в целевой домен / службу / что угодно.

0 голосов
/ 21 января 2010

Направьте запрос ajax jsonp на php-файл в том же домене, и в этом php-файле Trought cUrl сделайте запрос на второй домен.

Короче говоря, используйте php-файл в качестве туннеля между двумя доменами (cUrl - только пример)

...