Php 如果$#u SESSION[';SESS#u USER#u ID';]不是';t集

Php 如果$#u SESSION[';SESS#u USER#u ID';]不是';t集,php,javascript,function,isset,Php,Javascript,Function,Isset,如果用户未登录,此php函数当前会将用户重定向到另一个页面 if(!isset($_SESSION['SESS_USER_ID']) || (trim($_SESSION['SESS_USER_ID']) == '')){ header("location: login_failed.html"); exit(); } 如何更改函数,使其不重定向用户,而是执行以下操作: 触发javascript函数:loginFailed() 阻止预加载的特定iFrame启动(这些iFrame需要用户登录

如果用户未登录,此php函数当前会将用户重定向到另一个页面

if(!isset($_SESSION['SESS_USER_ID']) || (trim($_SESSION['SESS_USER_ID']) == '')){
header("location: login_failed.html");
exit();
} 
如何更改函数,使其不重定向用户,而是执行以下操作:

  • 触发javascript函数:
    loginFailed()
  • 阻止预加载的特定iFrame启动(这些iFrame需要用户登录,如果未登录,则当前作为空iFrame打开)。我已经在下面包含了这个脚本。或者,阻止具有特定类或数据fancybox类型的iFrame启动,或者阻止需要
    的iFrame启动!isset($\u会话['SESS\u USER\u 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');
});   
函数登录失败(){
$().toastmessage('showtoos'{
文本:“登录失败

请检查您的用户名和密码”, sticky:错, 位置:'上止点', 键入:“消息”, closeText:“”, 关闭:函数(){console.log(“toast已关闭…”)} }); } $(函数(){ $(“.fancybox”).fancybox({ 预加载:正确, }); $(“.fancybox”).eq(0).trigger('click'); });
我试过:

echo "<script>loginFailed();</script>";
echo "<script type="text/javascript">loginFailed();</script>";
echo "<script type="text/javascript">loginFailed;</script>";
echo“loginFailed();”;
echo“loginFailed();”;
echo“登录失败;”;

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";
}

添加到techfoobar的答案中

一般来说,将PHP中的变量放入Javascript(如果需要)并让Javascript处理是一种好的做法,而不是根据PHP变量重复使用不同的Javascript

请记住,客户端可以操作所有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>
if(!isset($_会话['SESS_用户ID'])| |(trim($_会话['SESS_用户ID'])==''){
$t=“无会话”;
}
否则{
$t=“是”会话;
} 
.... 
var session=“”;
如果(会话==“无会话”)
登录失败();

我将@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应该显示什么,但它只改变用户的体验,不提供任何安全性

你能发布完整的javascript吗?是否包括loginFailed()函数?另外,你在哪里回显javascript可能会影响你的结果。所以PHP部分在一个iframe中,但是你想让它影响主窗口上的javascript?是的,除非我需要以另一种方式进行,我知道它们在不同的区域运行,但我想必须有一种方法来实现-你介意告诉我如何在AJAX中实现吗?太棒了!我现在就试用:-D我假设这也可以用来修改显示的菜单项?(这是我的待办事项列表上的下一项;-)它会回显“不正常”,但不会触发loginFailed()。我想这可能是我的语法错误。你介意看一下我的密码吗?我把它贴在snipt上了。页面上的php和javascript位于:和,来自isloggedin.php的代码在这里:我把它上传到我的网站上,认为这会更简单,但现在我看到它回显“OK”,即使它没有登录,所以我认为它的语法肯定有问题。我还想知道是否需要以某种方式调用ajax?启动iframe的页面是-www.click2fit.com/launch_test_techfoobar.html,而iframe本身是www.click2fit.com/member_iframe_techfoobar.php既然客户端可以操纵javascript变量,您是否建议将其与重定向结合使用(以防止打开特定页面)?您应该很好,我只是想确保你没有使用javascript作为保护页面的唯一手段,而这些页面只能作为用户访问。很好:-D你知道我如何使用javascript修改显示的菜单项吗?(这是我待办事项清单上的下一项;-)我宁愿使用javascript:-)我很难让它正常工作,但我认为这可能是我的语法错误。你介意看一下我的密码吗?我把它贴在snipt上了。页面上的php和javascript位于:和,来自auth_loginFailed.php的代码位于: