jquery – Codeigniter会话使用ajax调用进行错误检测

前端之家收集整理的这篇文章主要介绍了jquery – Codeigniter会话使用ajax调用进行错误检测前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的CodeIgniter应用程序使用会话库并将数据保存到数据库

我一直在遇到一些问题,在某个ajax调用之后创建空白会话。

调查后,似乎有2个同时发出的同时发出的函数调用需要进行会话验证。一个会失败,另一个会很好。

我能够解决这个问题,而不是让他们同时发射。但是我仍然不明白为什么它失败的原因。它是否与一个呼叫更新用户cookie和第二个呼叫无效?或者,当阅读数据库时,它会死亡吗?

我看了一下Session的核心课程,没有发现任何线索的原因。

如果有任何一个有同样的问题,我会感激任何关于如何调试的建议或原因。

谢谢!

编辑:

我原来说有408状态回报。这是一个无关的情况。

这是并行启动MyVar.refresh()的函数

function (event)
{
    var self$ = this.a$;
    var uid  = this.b$.val();
    var tid  = this.c$.val();
    var jqxhr = $.post('/controller1/index',{'uid':uid,'tid':tid,'action':true},function(re)
    {
        if(re.message != 'success')
        {
            MyVar.alert('<span class="msg_error sprite"></span>' + re.error);
            MyVar.refresh();
        } 

    },'json');
    MyVar.refresh();
    return stopDefault(event);
};

可能的解决方案:

发现这个:http://codeigniter.com/forums/viewthread/102456/

显然它不适合ajax。一个解决方案是禁止会话更新,如果它是一个ajax调用;唯一的问题是我们的网站大多是用ajax建立的。

另外,刚刚把sess_time_to_update降低到非常频繁的程度,而且ajax做得很好。浏览器刷新也没有超时。不知道为什么如果会话ID已经在ajax调用和浏览器cookie从未更新过了。

解决方法

尝试这个
<?PHP
/**
 * ------------------------------------------------------------------------
 * CI Session Class Extension for AJAX calls.
 * ------------------------------------------------------------------------
 *
 * ====- Save as application/libraries/MY_Session.PHP -====
 */

class MY_Session extends CI_Session {

    // --------------------------------------------------------------------

    /**
     * sess_update()
     *
     * Do not update an existing session on ajax or xajax calls
     *
     * @access    public
     * @return    void
     */
    public function sess_update()
    {
        $CI = get_instance();

        if ( ! $CI->input->is_ajax_request())
        {
            parent::sess_update();
        }
    }

}

// ------------------------------------------------------------------------
/* End of file MY_Session.PHP */
/* Location: ./application/libraries/MY_Session.PHP */

问题出在会话类的sess_update函数中,X秒后会生成一个新的session_id。每个页面都有一个session_id,如果session_id在ajax调用之前到期,则该调用将失败。

在/ application / libraries /中创建一个PHP文件名称为MY_Session(或者你设置的任何前缀),粘贴这个代码就是这些。
函数将覆盖会话类中的sess_update函数,如果该请求是由ajax进行的,则查看每个请求,并跳过sess_update函数

它的一个坏主意将sess_expiration设置在更高的值。这是一个安全功能,可以保护您免受会话劫持

PD:我不太流利的英语,如果你不明白什么只是让我知道。

猜你在找的jQuery相关文章