JS Event Listener无限地检查PHP会话

时间:2018-03-15 17:52:41

标签: javascript php

我希望我的页面能够持续检查用户会话是否仍处于活动状态。 如果使用事件监听器。我担心的是php文件执行时间有限。有没有办法将PHP执行设置为无限?或者有更好的方法吗?

JS:

$(document).ready(function() {
    var loginSource = new EventSource("/structure/ajax/check_login_session.php");

    loginSource.addEventListener("login-verification", function(e) {
        var response = JSON.parse(e.data);
        if (data.login_failed) {
            login_fail_redirect();
        }
    });
})

PHP

function send_response() {

    if (empty($_SESSION['user_info']) || empty($_SESSION['user_info']['active'])) {

        $response = array("status" => "failed", "login_failed" => 1);

    } else {

        $response = array("status" => "success", "login_failed" => 0);

    }

    echo "event: login-verification\n";
    echo 'data: '.json_encode($response);
    echo "\n\n";
    flush();

}
while (true) {
    send_response();
    sleep(2);
}

1 个答案:

答案 0 :(得分:0)

使用javascript setInterval代替。它会将定时请求发送到后端,以检查会话是否处于活动状态。

$(document).ready(function() {
    setInterval(function {
        var loginSource = new EventSource("/structure/ajax/check_login_session.php");

        loginSource.addEventListener("login-verification", function(e) {
            var response = JSON.parse(e.data);
            if (data.login_failed) {
                login_fail_redirect();
            }
        });
    },1000); //time in ms
})

然后从您的后端替换此代码:

while (true) {
    send_response();
    sleep(2);
}

send_response();