У меня есть запрос jquery Ajax, который происходит на странице. На стороне php я проверяю, активен ли сеанс и что-то делает. Если сеанс неактивен, я хочу перенаправить пользователя на другую страницу в php (перенаправление заголовка). как мне это сделать.
Я знаю, как добиться этого в javascript (т.е. если session_fail затем изменит window.location, но есть ли что-то, что я могу сделать в php / cakephp
Если я понимаю, что вы хотите, то это то, как я это реализую. Это в Prototype вместо jQuery, но вам не нужно долго переводить:
new Ajax.Request('process.php', { on401: function(response) { var redirect = response.getHeader('Location'); document.location = redirect; } });
На вашем PHP выведите следующее, если сеанс неактивен:
header('Location: http://example.com/login.php', true, 401); exit;
Перенаправления только говорят: «Запрошенные данные можно найти здесь».
HTTP не дает возможности сказать «Даже если вы запросили ресурс для входа на страницу, вам следует оставить эту страницу и перейти в другое место».
Вам нужно вернуть ответ, который ваш JavaScript понимает как «Перейдите в другое место» и обработайте его в своем собственном коде.
Это то, что вы хотели бы получить в своем php, ЕСЛИ ЭТО БЫЛО РЕГУЛЯРНЫЙ ЗАПРОС, а НЕ AJAX
if (isset ($ _ SESSION)) doSomething ();
else header ("Location: otherUrl");
Поскольку это вызов Ajax, вы не передаете управление php, а просто пытаетесь получить ответ, который (вероятно) заполняет конкретный раздел вашей страницы. Вы не указываете, какую функцию jQuery ajax вы используете, но это важно. Я бы предположил, что вы используете либо $ .get (), либо $ (element) .load () ??
Не зная подробностей, это мое лучшее предложение для вас.
Ajax call: $ .get (url, callbackFunc);
PHP:
if (isset ($ _ SESSION)) echoSomething ()
else echo ("redirect");
callbackFunc:
функция (данные) {if (data == "redirect") window.location = otherUrl; else $ ("# wishElement"). html (data);}