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