Запуск или предотвращение функции javascript, если $ _SESSION не задано

Эта функция php в настоящее время перенаправляет пользователя на другую страницу, если они не вошли в систему

if(!isset($_SESSION['SESS_USER_ID']) || (trim($_SESSION['SESS_USER_ID']) == '')){ header("location: login_failed.html"); exit(); } 

Как я могу изменить функцию, чтобы вместо перенаправления пользователя она выполняла следующее:

  • loginFailed(); функцию javascript: loginFailed();
  • Предотвращает запуск определенных фреймов, которые предварительно загружаются из системы (для этого требуется, чтобы пользователь вошел в систему и в настоящее время открыт как пустые фреймы, если они не вошли в систему) . Я включил скрипт для этого ниже. Альтернативно, предотвращение запуска 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>"; 

Добавляем к ответу 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"; } 

Я объединил предложение @ 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, но это только изменяет опыт пользователя и не обеспечивает никакой безопасности.