【问题标题】:Updating session cookie during ajax call in codeigniter在codeigniter中的ajax调用期间更新会话cookie
【发布时间】:2014-04-23 12:24:42
【问题描述】:

以下是我的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。这是为什么呢?

【问题讨论】:

标签: jquery ajax codeigniter codeigniter-2


【解决方案1】:

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

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

因此,Answer 包含一个覆盖 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 */

【讨论】:

    猜你喜欢
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    相关资源
    最近更新 更多