2010-05-09 149 views
1

我在服务器端使用ajax post请求检索会话时遇到问题。下面是我的示例代码:Codeigniter + ajax(jQuery)会话问题

的JavaScript:

$(function() { 
    $('.jid_hidden_data').submit(function() { 
     var serialized = $(this).serialize(); 
     var sUrl = "http://localhost/stuff"; 
     $.ajax({ 
      url: sUrl, 
      type: "POST", 
      data: serialized, 
      success: function(data) { 
       alert(data); 
      } 
     }) 
     return false; 
    }); 
}); 

CodeIngiter(PHP)侧:

function stuff() 
{ 
    $post_stuff = $this->input->post('my_stuff');  // WORKS PERFECTLY 
    $user_id = $this->session->userdata('user_id'); // RETURNS NULL 
} 

凡评论返回NULL,它应该返回用户的会话数据,因为它确实存在。问题是什么?方法后没有得到饼干或什么?谢谢你的帮助!

更新:

为了澄清我有$这个 - >会话级> set_userdata($数据)会话集。 而我没有js/ajax发布时没有问题。我的意思是用简单的形式提交它的工作正常。

+0

你怎么知道它存在?数据是在cookie中还是在会话中? – Galen 2010-05-09 05:56:21

+0

登录后,它会像这样设置$ this-> session-> set_userdata($ data)。另外我没有问题时发布它没有js/ajax,但与纯表单提交。 – faya 2010-05-09 06:00:11

+0

我们能否看到您如何向ajax请求提供数据? – bschaeffer 2010-05-09 07:38:53

回答

5

我在使用不同域名访问CI应用程序时遇到类似问题。即使这些域名指向同一个Web服务器,我也有两个单独的会话。

例如,考虑这个控制器:

class User extends Controller 
{ 
    function User() 
    { 
     parent::Controller(); 
     $this->load->library('session'); 
    } 

    function login() 
    { 
     $this->session->set_userdata('login_token', true); 
     echo 'finished logging in'; 
    } 

    function logout() 
    { 
     $this->session->unset_userdata('login_token'); 
     echo 'finished logging out'; 
    } 

    function status() 
    { 
     if ($this->session->userdata('login_token')) 
     { 
      echo 'logged in'; 
     } 
     else 
     { 
      echo 'not logged in'; 
     } 
    } 
} 

我访问以下网址,按顺序排列。除了每个URL是相应的输出:

http://localhost/app/user/login

http://localhost/app/user/status“说完在登录”“登录”

http://127.0.0.1/app/user/status

所以我有会话时访问应用程序“未登录”在本地主机上不会转移到127.0.0.1,即使我正在访问同一个Web服务器。

难道您的AJAX脚本中的URL的域名与您正在测试的URL的域名不同?

+0

是的,这是我的问题。虽然在答案之前解决了它。无论如何,非常感谢! :) – faya 2010-05-11 08:34:49

+1

我有同样的问题,并在与会话,CSRF等三天挣扎后,我终于阅读,这在我的jQuery AJAX请求中更改'localhost'为127.0.0.1,并且问题奇迹般地消失了。 +100为先前的答案。 – 2011-07-08 20:00:22