如何在php中自动注销

时间:2016-01-08 19:36:36

标签: javascript php jquery ajax

我使用登录/注销创建网站。

如果在网络上按任何链接或按钮,我会调用ajax函数来检查登录,如果时间已过期注销用户。在注销功能中,我更新了我的数据库。

但如果我关闭浏览器或页面用户未注销且数据库未更新。如何为它添加事件监听器。

PHP文件

if (isset($_POST['action']) && !empty($_POST['action'])) {
    $action = $_POST['action'];
    switch ($action) {
        case "checkLogin":
            echo isLogged();
            break;
        case "logout":
            logout();
            break;
         //and more
    }
}

function isLogged() {
    $data = array(
        "login"     => 0,
        "username" => "null"
    );

    if(isset($_SESSION["user"]) && isset($_SESSION["start"])) {
        $session_start = $_SESSION["start"];
        //more then 600 sec
        if(time() - $session_start < 600){
            $data = array(
                "login"     => 1,
                "username" => $_SESSION["user"]
            );
        }else{
            logout();
        }
    }
    return json_encode($data);
}

function logout(){
    if(isset($_SESSION["user"])) {
        $connection = connectToDB();
        if($connection != null) {
            $nickname = $_SESSION["user"];
            $time = date("Y-m-d H:i:s");
            $sql_statement = "UPDATE users SET is_login='0',last_login='$time' WHERE username='$nickname';";
            $connection->query($sql_statement);
        }
        session_destroy();
    }
}

2 个答案:

答案 0 :(得分:0)

没有万无一失的方式来“关闭”用户关闭你的窗户,或者正如@Taplar指出的那样,关闭他们的电脑。使用在this question中描述的会话中存储登录时间的技术,您可以运行cron或其他类型的后台任务,检查数据库中是否有到期的会话,然后在那里使它们到期。

答案 1 :(得分:0)

您可以使用 async - false添加卸载侦听器,以便浏览器在请求未完成时等待:

$(window).unload(function() {
    $.ajax({
        type: 'GET',
        url: '/logout',
        async: false
    });
});

请注意,浏览器会挂起&#34;在请求期间,它可能会混淆用户

相关问题