Codeigniter IonAuth-似乎在随机将我注销

Codeigniter IonAuth-似乎在随机将我注销,codeigniter,session,authentication,codeigniter-2,ion-auth,Codeigniter,Session,Authentication,Codeigniter 2,Ion Auth,我正在使用ionAuth&它似乎几乎是随机地将我注销?我使用的是Codeigniter v2.1.4-它可以很好地登录,但是ionAuth似乎会在随机间隔内注销,有没有办法强制会话保持活动状态,直到我调用ionAuth->logout函数 我的CI配置如下所示: $config['sess_cookie_name'] = 'cisession'; $config['sess_expiration'] = 7200; $config['sess_expire_on_close']

我正在使用ionAuth&它似乎几乎是随机地将我注销?我使用的是Codeigniter v2.1.4-它可以很好地登录,但是ionAuth似乎会在随机间隔内注销,有没有办法强制会话保持活动状态,直到我调用ionAuth->logout函数

我的CI配置如下所示:

$config['sess_cookie_name']     = 'cisession';
$config['sess_expiration']      = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 600;
 $config['user_expire'] = 0;
 $config['user_extend_on_login'] = FALSE;
我的ion_auth配置文件如下所示:

$config['sess_cookie_name']     = 'cisession';
$config['sess_expiration']      = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 600;
 $config['user_expire'] = 0;
 $config['user_extend_on_login'] = FALSE;

有谁能告诉我是什么导致了这个问题吗?

问题的原因是会话cookie的循环。当执行AJAX调用时,CodeIgniter 3中包含了正确的修复程序

您有四个选项:

Cope: 以前我自己也遇到过这个问题,但不知道确切的原因。简而言之,我保存了每个XMLHttpRequest的承诺,如果遇到HTTP状态码401,客户端应用程序将以弹出窗口的形式请求凭据,然后重试AJAX承诺

客户端使用jQuery,只需添加以下ajaxError处理程序:

$(document).ajaxError(function (e, xhr, settings, exception) {
    if (xhr.status == 401)
    {
        // open your popup
        $('#login-popup').modal('open');

        // attach the xhr object to the listener
        $(document).bind( "retry-xhr", {
                xhro: xhr
            },
            function( event ) {
            // retry the xhr when fired
            $.ajax( event.data.xhro );
        });
    }
});
当您重新登录时,只需拨打此电话重试您的请求:

$(document).trigger('retry-xhr');
在服务器端,您只需要在构造函数中添加if

if (!$this->session->userdata('logged_in') && $this->input->is_ajax_request())
        {
            $this->output->set_status_header('401');
            exit;
        }
这是很有用的,因为一些用户会让他们的web应用程序窗口在一夜之间打开,会话超时就会开始。然后用户会打电话告诉我不能使用AJAX功能,我会告诉他们按F5

如果在Angular上,我已经成功地使用了HTTP身份验证拦截器模块

黑客: 看这篇文章,他的解决方案是在ci_会话表中创建另一个字段,并检查这两个cookie,这样在轮换后会话仍然有效

它还详细解释了导致此故障的原因

升级: 开始使用已修复的下一个版本:

补丁 替换system/libraries/Session.php(函数sess_update())中的第346行

与:


您是否在任何地方发出ajax请求?CIs会话类和竞争条件存在一些问题,这些问题还没有完全解决。yetI am使用ajax请求-在主页上有一个ajax请求,它基本上执行GET请求来搜索数据库表。我将尝试一下-是否有从codeigniter的v2.1.4升级到v3的好指南?我需要为我的v2应用程序做很多变通方法才能使其与v3兼容吗?这取决于你的应用程序的功能,我认为最大的变化是一些函数现在返回null而不是false。如果你的应用程序逻辑依赖于此,你将有一个伟大的时间为这些函数名变灰。我相信这是升级最贴切的指南:谢谢你-我很快就会尝试这一方法,但无论哪种方法都会为你提供的有用信息量提供奖励-再次感谢:)真棒=]如果你将有一个日复一日运行的商务应用程序,请务必尝试第一种方法(会话超时可能会成为一个问题)嗨,Josue-你能解释一下我到底需要在我的CI应用程序中的什么地方添加此代码吗?我只是有点不确定,你似乎知道这个问题的分数:)谢谢!:)