0

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

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

如何更改函数,以便它执行以下操作而不是重定向用户:

  • 触发javascript函数:loginFailed();
  • 阻止预加载的特定 iframe 启动(这些要求用户登录,并且如果未登录,则当前作为空 iframe 打开)。我在下面包含了这个脚本。或者,阻止启动具有特定类或 data-fancybox-type 或需要!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>";
4

3 回答 3

1

添加到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>
于 2012-12-14T02:02:29.277 回答
0

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";
}
于 2012-12-14T01:56:58.030 回答
0

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

于 2012-12-15T20:23:51.530 回答