登录状态指示灯功能不起作用


login status indicator function not working

我的ajax-php数据库主页上有一个登录状态指示器div。单击时登录按钮执行两项操作。

<input value="Login" type="button" onclick='logIntheUser(/*function to process login request*/);updateLoginStatusIndicator(/*function to update login status in login staus indicator div*/);' />
  1. 它调用一个logIntheUser函数将登录数据发送到php访问 要设置$_SESSION['username']的处理器文件,如果用户名和 密码正确。
  2. 它还调用updateLoginStatusIndicator函数,该函数显示 如果设置了$_SESSION['username'],则以$_SESSION['username']身份登录 或者如果未设置$_SESSION['username']则显示"未登录"。

以下是使用updateLoginStatusIndicator函数执行的控制器代码:

    /*===login status indicator/updater===*/
    if(isset($_REQUEST['change-login-indicator']))
    {
    if(!isset($_SESSION))
    {
    session_start();
    }
    if(isset($_SESSION['username']))
    {
    echo 'Logged in as:'.$_SESSION['username'];
     }
    else
    {
    echo 'not logged in';
    }

现在的问题是用户在一段时间内成功登录(即 $_SESSION['username']已设置),但第二个功能updateLoginStatusIndicator仍显示"未登录"。登录状态指示器在等待时间内不工作。如果updateLoginStatusIndicatorlogIntheUser后运行,则可能会正确更新登录状态。但我不知道该怎么做。请帮忙!

编辑

当我调用该函数作为回调时,例如:logIntheUser(updateLoginStatusIndicator()),它仍然不起作用(可能是我的回调方法不正确)。然后,当我向updateLoginStatusIndicator()函数脚本添加set_time_limit(1);以将其延迟 1 秒时,它开始工作,但延迟脚本不是最佳做法。请帮助我如何才能毫不拖延地使用它,以便updateLoginStatusIndicator()函数仅在logIntheUser()函数完成执行后执行。请帮忙。

logIntheUser() 执行 AJAX 请求,对吧?那么updateLoginStatusIndicator()的问题很可能在于,如果在logInTheUser()之后被调用,而不是在AJAX请求成功完成之后。也就是说,它可能会在更新之前获取用户的状态。您应该在 AJAX 请求的回调中调用 updateLoginStatusIndicator()。

只需从

logInTheUser
函数返回一些值,并在该函数返回值时调用
updateLoginStatusIndicator
函数

在大多数情况下,当第一个函数发生错误时,就会发生这种情况。确保任何内容都可以停止脚本的执行。

编辑:

我建议您在 onclick 事件上使用单函数回调来修改您的 HTML:

onclick="logInProcedure();"

在 JS 中:

function logIntheUser() {
    /* Your code to process login */
    /* set a boolean variable to true or false */
    if(sucessfulyLoggedin) {
        return true;
    }
    return false;
}
function updateLoginStatusIndicator() {
    /* Your code here */
}

function loginProcedure() {
    if(logIntheUser()) {
        updateLoginStatusIndicator();
    }
}