перейти на страницу выхода через указанное время - проблема из-за команды заголовка, вызванной с помощью ajax

Я работаю с API в php/ajax, и у меня на каждой странице включен тест, если пользователь не вышел из системы из-за бездействия через определенное время. Это работает, но в некоторых моментах у меня проблемы. Вот история:

У меня есть один файл с именем index.php. В Index.php есть div — назовем его «div». У него также есть несколько кнопок — назовем его «новый» и «изменить». Когда я нажимаю кнопку, тело файла new.php и modify.php загружается с помощью метода ajax в «div». Все идет нормально. Но когда пользователь становится неактивным в течение определенного времени, он должен выйти из системы. И это так. Но, к сожалению, и понятно, почему это происходит, страница выхода печатается не в index.php, а в тело "div". Это легко понять - нажатие кнопки "новый" перемещает меня на new.php. New.php проверяет, вошел ли я в систему - я не вхожу, поэтому он перенаправляет меня на страницу logout.page, поэтому new.php является результирующей страницей выхода и становится телом моего "div". Вот вопрос: как перенаправить всю страницу (index.php) на страницу выхода, если я вышел из системы и не печатать ее в div. Помните, что нажатие кнопки «новый» не обновляет index.php, потому что я использую ajax. Он только обновляет мой div. Это вообще возможно?


person Kalreg    schedule 27.04.2012    source источник


Ответы (3)


Не выполняйте перенаправление в new.php, вместо этого заставьте этот PHP-скрипт возвращать определенное значение, когда пользователь выходит из системы, анализируйте этот вывод в своем вызове AJAX и при необходимости выполняйте перенаправление через javascript.

Другими словами:

  • если new.php получилось, делайте то, что обычно делаете
  • если new.php возвращает какой-либо статус "ошибка аутентификации", выполните перенаправление

Лучший способ — инкапсулировать ответы AJAX в объект JSON, чтобы вы могли иметь как данные, так и коды ответов для упрощения анализа на стороне javascript.

person Matteo Riva    schedule 27.04.2012
comment
ваша идея, на мой взгляд, представляет серьезную угрозу безопасности. такая проверка не должна выполняться через ajax - вы не можете доверять пользователю - person Kalreg; 28.04.2012
comment
Я не понимаю проблемы безопасности, ответ ajax генерируется вашим PHP-скриптом, а не пользователем. - person Matteo Riva; 28.04.2012
comment
Вы хотите, чтобы я перенаправил пользователя с помощью javascript. поскольку javascript является клиентским языком, злоумышленник может предотвратить перенаправление. - person Kalreg; 28.04.2012
comment
так? перенаправление не является мерой безопасности, это просто то, что нужно сделать после отказа в доступе. Вы можете просто показать сообщение об ошибке вместо перенаправления или даже ничего не делать. Дело в том, что фактическая проверка пользователя выполняется PHP - person Matteo Riva; 28.04.2012
comment
после долгих размышлений я считаю, что вы можете быть правы :)), но мой код имеет много модификаций: / +1 для вас :) - person Kalreg; 28.04.2012
comment
необходимы легкие модификации, просто загрузите код перенаправления, откуда вы сейчас делаете перенаправление, это будет работать. - person Anton; 28.04.2012

Как насчет использования перенаправления javascript? Вам действительно не нужно заботиться о «хакерских» пользователях, потому что у них не будет никаких разрешений без входа в систему, поэтому просто перенаправьте обычных пользователей с помощью:

<script language="JavaScript">document.location="/logout.php";</script>
person Anton    schedule 27.04.2012

Попробуйте это - измените «3000» на любое количество миллисекунд (например, если это 15 минут, установите «900000»)

<script>

(function(){
  setTimeout( function(){
      window.location = "www.yourawesomesite.com/logout";
    }
  ,3000)
})();

</script>
person philwinkle    schedule 27.04.2012