以下是我的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。那是为什么?
答案 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 */