php - jQuery 和 Ci 未正确处理注销功能

标签 php javascript jquery codeigniter

我下面的代码有问题吗?当 Ci session 过期时,我似乎无法收到警报(“成功”)来处理。下面是我的 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));
}

关于php - jQuery 和 Ci 未正确处理注销功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11705248/

相关文章:

javascript - 在 Internet Explorer 中离线(客户端)创建 csv 文件

javascript - 具有字段总和的表单验证

php - 基于 header 的 Varnish 缓存

php - 如何将 List-Unsubscribe header 添加到 PHP 的 native mail() 函数

javascript - 使 Angular HTTP 调用可重用

javascript - 收到 Facebook 应用请求通知但未显示消息

窗口/选项卡之间的 javascript/jquery 内存空间

jquery - 如何自定义 jquery 移动对话框

php - 如何通过模型显示表中的数据(自定义行除外)

php - Laravel 5.4 中的数组到字符串转换, Controller