Запуск или предотвращение функции JavaScript, если $_SESSION['SESS_USER_ID'] не установлен
Эта функция php в настоящее время перенаправляет пользователя на другую страницу, если он не вошел в систему
if(!isset($_SESSION['SESS_USER_ID']) || (trim($_SESSION['SESS_USER_ID']) == '')){
header("location: login_failed.html");
exit();
}
Как я могу изменить функцию, чтобы вместо перенаправления пользователя она делала следующее:
- Запускает функцию JavaScript:
loginFailed();
- Предотвращает определенные iframes, которые предварительно загружены от запуска (они требуют, чтобы пользователь вошел в систему, и в настоящее время открываются как пустые iframes, если они не вошли в систему). Я включил сценарий для этого ниже. В качестве альтернативы, предотвращение запуска фреймов, которые имеют определенный класс или тип данных-fancybox, или те, которые требуют
!isset($_SESSION['SESS_USER_ID'])
,
Функции, которые я хочу вызвать / предотвратить
function loginFailed() {
$().toastmessage('showToast', {
text: 'Log In Failed<br/><br/>Please check your username and password',
sticky: false,
position: 'top-center',
type: 'message',
closeText: '',
close: function () { console.log("toast is closed ...") }
});
}
$(function () {
$(".fancybox").fancybox({
preload: true,
});
$(".fancybox").eq(0).trigger('click');
});
Я пробовал:
echo "<script>loginFailed();</script>";
echo "<script type="text/javascript">loginFailed();</script>";
echo "<script type="text/javascript">loginFailed;</script>";
3 ответа
Я объединил предложение @hellohellosharp с решением, которое мне дал @willoller для другой проблемы, и выяснил это:-)
Добавьте это к php:
$logged_in = (isset($_SESSION['SESS_USER_ID']));
Добавьте это к JavaScript:
<?php if ($logged_in) : ?>
<a class="fancybox" data-fancybox-type="iframe" href="iframe1.html"></a>
<?php else : ?>
loginFailed();
<?php endif; ?>
Я также использую это для изменения параметров меню в зависимости от того, вошел ли пользователь в систему.
Просто напоминание - он использует ISSET для определения того, что должен отображать javascript, но он только меняет восприятие пользователя и не обеспечивает никакой безопасности.
Добавление к ответу techfoobar...
Как правило, рекомендуется помещать ваши переменные из PHP в Javascript (при необходимости) и разрешать его обработку в Javascript, а не выводить другой javascript в зависимости от переменной PHP.
Имейте в виду, что все переменные JavaScript могут манипулировать клиентом.
Попробуйте что-то вроде этого:
if(!isset($_SESSION['SESS_USER_ID']) || (trim($_SESSION['SESS_USER_ID']) == '')){
$t="no_session";
}
else{
$t="yes_session";
}
....
<script>
var session="<?php echo $t; ?>";
if(session == "no_session")
loginFailed();
</script>
PHP работает на стороне сервера. JavaScript работает на стороне клиента внутри браузера. PHP не может напрямую вызывать функции JavaScript.
Однако PHP может отображать JavaScript вместе с HTML в браузер, чтобы браузер, в свою очередь, мог его запустить.
В вашем конкретном случае вы можете проверить состояние входа в систему с помощью вызова AJAX и вызвать требуемые методы JS при успешном обратном вызове.
Пример:
Для проверки статуса входа в систему:
/* JS */
function checkLoginState() {
$.post('/yourserver.com/isloggedin.php', function(data) {
if(data != "OK") { // not logged in
// call your JS method thats disables stuff etc.
loginFailed();
}
});
}
// Periodically check login state
setInterval(checkLoginState, 10000); // check every 10 seconds, change as needed.
/* PHP - isloggedin.php */
if(!isset($_SESSION['SESS_USER_ID']) || (trim($_SESSION['SESS_USER_ID']) == '')){
echo "NOT OK";
}
else {
echo "OK";
}