在codeigniter中的ajax调用期间更新会话cookie

时间:2014-04-23 12:24:43

标签: jquery ajax codeigniter codeigniter-2

以下是我的ajax电话:

  remote: 
        {
            url:"http://localhost/my_site/index_page/validate_name",
            type: "post"
        }

因此在函数validate_name中,我按如下方式设置会话cookie:

$username = "test1";
$this -> session -> set_userdata('username', $username);

现在,在ajax调用完成后,我会检查另一个控制器中的会话数据,

if($this -> session -> userdata('username')=='test1')

事实证明它返回false。那是为什么?

1 个答案:

答案 0 :(得分:1)

发布的链接(Codeigniter session bugging out with ajax calls)解释了:

  

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

所以答案包括一个覆盖Codeigniter的会话功能的类,并警告你应该避免这种情况。下面是您必须创建的文件,它允许您正确完成ajax调用。

通过agustinrc89:

<?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 */