Почему при работе с AJAX не считываются данные сессии PHP?
Привет всем.
Второй день бьюсь над проблемой. На локальном хостинге сайт работает, при переносе на внешний сервер- нет.
При авторизации из JS последовательно вызываются 2 AJAХ запроса: 1- Авторизация и сохранение данных пользователя в сессии.
этот кусок работает, в сессии сохраняется то что нужно... 2. Формируется меню доступных пользователю опций.
А вот тут не срабатывает. Приходит ответ в котором значения параметров, взятые в сессии пустые (id пользователя к примеру).
При этом файл сессии живой, данные в нем есть. Т.е. в первом случае записалось, а во втором не считалась сессия...
Запросы идут к одному и тому же файлу php (именно в нем и стоит session_start) и далее, в зависимости от ключа инклудится тот или иной файл с запросом и обработкой.
запросы вызываются последовательно. В конце первого скрипта php стоит зsession_write_close() и затем echo result. На локальном компьютере же все работало- вот что смущает, может быть у хостера какая-то фишка не активна, так знать бы какая...
хм... не знал, право... Временно поставил alert(), действительно, второй вызов AJAX пришел с результатом ! Подскажите, пожалуйста как в JS сделать корректно ? дело в том что у меня вызовы AJAX в отдельных функциях, так как вызываются несколько раз.
function start(){
getUser()
getList()
}
larush: AJAX - асинхронная операция. Соответственно, основной поток скрипта не ждёт её завершения, а по завершении запроса в очередь выполнения ставится callback-функция (done, error, always или then).
Превратить вызов в синхронный можно передав async: false в $.ajax, но это не лучший способ.
Можно в первую функцию передавать вторую, которая будет вызываться из .done.
function getUser(onDone) {
$.post(...)
.done(function(data) {
...
if (typeof onDone === 'function')
onDone();
});
}
getUser(getList);
Эта связка из 2 функций работает, во второй функции подцепляется сессия, данные видны.
А следующая функция , вызываемая по клику на динамически сформированную ссылку в результате работы предыдущих функций, в скрипте на сервере уже не видит сессию !
function loadList(idProj){ //---------------------------
$.ajax({
type: "POST",
url: "script_php_aj_getallist", // раньше шел вызов aj_switch, а в том инклудились другие файлы
data: {
r:'showAll'
},
dataType: "json",
success: function(result){
}
});
}
Сессия есть, жива и с данными.
Заголовки одинаковые, скрипты вызываются из одного места (main.js), исплняются также в одной папке через инклудинг нужных файлов. Т.е. во всех Ajax запросах указан один и тот же входной скрипт на сервере.
larush: А случаем по таймеру никакие запросы не делаются? В браузере откройте средства разработчика и посмотрите, не активен ли ещё какой-нибудь запрос в момент нажатия на ссылку.
Rsa97: Если вы имели в виду сетевую активность- то нет, отработали 2 запроса при регистрации и все... Подождал еще немного и попробовал запустить ссылку. Ответа с сессиями так и нет
larush: Файл сессии на сервере присутствует? Никем не блокирован?
Проверьте папку /var/lib/php5 на наличие файлов sess_*. Запустите на сервере команду lsof /var/lib/php5/*, она покажет открытые кем-либо файлы.
Убедитесь, что в php-скрипте вызывается session_start().
Rsa97: Отвечая по пунктам я обратил внимание на ession_start() .... У меня в некоторых файлах не было скобок :( ... Детская ошибка... Спасибо за ответы !
Проверьте, что сессия выдается для всего домена (параметр path внутри сессионной куки).
Проверьте, что кука передается во втором аякс запросе и запрос уходит на тот же домен.