Отправить заголовок, чтобы «перенаправить» все окно? - PullRequest
3 голосов
/ 27 сентября 2010

Так что в моей библиотеке аутентификации php, если кто-то не вошел в систему, они перенаправляются на домашнюю страницу:

redirect('home/index');

Проблема в том, что у меня есть некоторые модальные окна, которыезагружать контент через ajax.Если пользователь каким-то образом вышел из системы (но все еще находится на странице, где он «вошел в систему»), тогда модал показывает страницу входа, поскольку модал был «перенаправлен» на домашнюю страницу.

Эта проблема можетпроисходит, если пользователь долгое время ничего не делал (и вышел из системы), или если на одной из них открыто несколько вкладок и они выходят из системы, а на другой пытаются открыть модальное всплывающее окно.

Есть ли способ перенаправить все окно?

Ответы [ 7 ]

1 голос
/ 29 сентября 2010

два решения:

1) установить функции javascript на главной странице, каждые х секунд проверять cookie, если не существует, перенаправлять всю страницу

location.href="login.php"

2) на странице, загруженной ajax, установите код перенаправления javascript, вы не можете сделать это с PHP, так как скрипт не может знать контекст, это просто предварительная обработка результата запроса. Код Javascript, который может быть распечатан с помощью PHP где угодно (включая тело)

  if (notLogged){
      window.redirect='login.php';
    }
0 голосов
/ 30 сентября 2010

Использование сеанса до открытия модала.При каждом следующем нажатии или отправке должна быть проверка сеанса, и она будет перенаправлена.

0 голосов
/ 28 сентября 2010

Другой подход может заключаться в том, чтобы ваш авторизатор по-разному реагировал на ваш xmlhttprequest ... путем анализа переменной $_SERVER['HTTP_X_REQUESTED_WITH'].Если вы можете сделать вывод, что запрос отправлен с помощью «XMLHttpRequest», вы можете отобразить форму входа в модал без перенаправления.Таким образом, пользователь не перенаправляется на другую страницу, чтобы снова войти в систему, но он может войти прямо из диалогового окна, которое он открыл, и продолжить с того места, где он остановился.

Для этого, конечно, требуются некоторые клиентские изменения в вашем сценарииформа входа в систему отправить ect ... но это самое элегантное решение с точки зрения удобства использования.

0 голосов
/ 28 сентября 2010

Вы всегда можете перенаправить все окно, используя функцию заголовка, перенаправляя пользователя на любую страницу по вашему желанию.

<?php header('Location: myserver.com/home/'); ?>
0 голосов
/ 27 сентября 2010

Приложение, над которым я сейчас работаю, делало то же самое в прошлом - решение: если это функция, вызываемая ajax, и если они вышли из системы, просто введите простой «logout» и проверьте его в javascript Возврат ajax и использование свойства location.href для перенаправления пользователя.

0 голосов
/ 27 сентября 2010

Простым решением может быть включение скрытого тега или другого вида флага в Ajax-результат , чтобы определить, является ли пользовательвсе еще "вошел в систему".Если его нет, то сделайте что-то вроде window.location.href="myserver.com/home/"; в функции обратного вызова Ajax-запроса.

0 голосов
/ 27 сентября 2010

Что ж, если вы отправляете HTML в модальное диалоговое окно и не хотите его менять, вы всегда можете проверить, есть ли в ответе форма входа.Если форма там, перенаправить все окно.Допустим, ваш идентификатор формы входа в "login_form", ваш обратный вызов ajax будет выглядеть примерно так:

function(data){
    if($(data).find("#login_form").length>0)
        location.href="/login_url"
    else{
        //handle the ajax response
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...