jQuery和Ci没有正确处理注销功能

jQuery and Ci not properly processing a logout feature

本文关键字:正确处理 注销 功能 Ci jQuery      更新时间:2024-04-27

下面的代码有什么问题吗?当Ci会话到期时,我似乎无法获得处理警报("成功")。以下是我的jquery和Ci代码:

setInterval(function() {
    jQuery.getJSON("<?=base_url()?>index.php/regUserDash/sessionExpire", function(data) {
        var sessionState = jQuery.parseJSON('{"sessionExpired":"true","sessionExpired":"false"}');
        if(sessionState.sessionExpired === "true") { // if session is expired run the following code
            var dataString = 'true';
            jQuery.ajax({   // send the expired signal to Ci so that it knows the session has expired
                type: 'POST',
                dataType: 'JSON',
                url: '<?=base_url()?>index.php/regUserDash/extendSession',
                data: {'dataString': true},
                success: function(data) {
                    if (data.extendedSession == true) {
                        alert('success');
                    } else {
                        return false;
                    }
                }
            });
        } else if(sessionState.sessionExpired == "false") {
            return;
        }
    });
}, 120000); // loop through every 2 minutes

CodeIgniter代码:

public function sessionExpire() {
        if ($this->session->userdata("logged") == "1") {
            echo json_encode(array("sessionExpired" => false));
        } elseif($this->session->userdata("logged") == "0") {
            echo json_encode(array("sessionExpire" => true));
        }
    } public function extendSession() {
        // set loggedIn session var
        $this->session->set_userdata('logged', '1');
        // return json to ajax call
        echo json_encode(array("extendedSession" => true));
    }

jQuery.parseJSON('{"sessionExpired":"true","sessionExpired":"false"}');返回第一个sessionExpired = true和第二个sessionExpired = false,它们覆盖第一个。

因此,这里有一种方法可以做到这一点(需要测试):

setInterval(function() {
    jQuery.getJSON("<?=base_url()?>index.php/regUserDash/sessionExpire", function(data) {
        if(data.sessionExpired == "true") { // if session is expired run the following code
            // var dataString = 'true'; // Remove this
            jQuery.ajax({   // send the expired signal to Ci so that it knows the session has expired
                type: 'POST',
                dataType: 'JSON',
                url: '<?=base_url()?>index.php/regUserDash/extendSession',
                data: {'dataString': true},
                success: function(data) {
                    //if (data.extendedSession == true) {
                        alert('success');
                    //} else {
                    //    return false;
                    //}
                    // Remove commented code, because extendSession() always return true
                }
            });
        } else {
            return 'Session not expired!';
        }
    });
}, 120000); // loop through every 2 minutes

和CI功能:

public function sessionExpire()
{
    if ($this->session->userdata("logged") == "1") {
        echo json_encode(array("sessionExpired" => false));
    } elseif ($this->session->userdata("logged") == "0") {
        echo json_encode(array("sessionExpired" => true));
    }
}
public function extendSession()
{
    // set loggedIn session var
    $this->session->set_userdata('logged', '1');
    // return json to ajax call
    echo json_encode(array("extendedSession" => true));
}