2014-11-20 91 views
0

我現在正在使用此代碼超過12個小時,任何幫助都將深表謝意。在我發佈代碼之前沒有幾個詞。我的後臺身份驗證代碼非常相似,現在我正在進行網站成員身份驗證。後臺工作正常,前端沒有。codeigniter會話數據在jquery重定向後丟失

這是CodeIgniter的應用程序,是我做了很多次。如果後端代碼無法正常工作,我會懷疑服務器有不同的設置,但後端代碼有效。我不與CI初學者,我想我已經做了一些地方愚蠢的錯誤......

這裏是登錄功能:

public function loginCheck() 
    {  
     // set the validation rules 
     $this->form_validation->set_rules('memberusername', 'Username', 'required|trim|encode_php_tags'); 
     $this->form_validation->set_rules('memberpassword', 'Password', 'required|trim|encode_php_tags'); 
     $this->form_validation->set_error_delimiters('<br /><p class=jsdiserr>', '</p><br />'); 
     // if validation is passed 

     if ($this->form_validation->run() != FALSE) 
     { 


      $this->db->where('memberUserName', $this->input->post('memberusername')); 
      $this->db->where('memberOldPassword', strtoupper(md5("EBOSS/".$this->input->post('memberpassword')."/EBOSS"))); 
      $query = $this->membersModel->get(); 
      if($query) 
      { 

       $data = array(
        'memberID'      => $query[0]['memberID'], 
        'memberUserName'    => $query[0]['memberUserName'], 
        'memberOldPassword'    => $query[0]['memberOldPassword'], 
        'memberEmail'     => $query[0]['memberEmail'], 
        'isUserLoggedIn' => TRUE 
       );   
       $currentUser = array(); 
       //echo "Here after the data?"; 
       //die(); 
       $this->session->set_userdata('currentMember', $data); 
       $currentMember = $this->session->userdata('currentMember'); 
       // print_r($currentMember); 
       //die(); 

       echo json_encode(array("success" => true)); 
     } else { 
       echo json_encode(array("success" => false, "error" => "Wrong credentials")); 
     } 
     // form validation has failed 
     } else {  
      $errorMessage = "Wrong Username or passwrod!"; 
     } 
    } // end of function loginCheck 

這裏是javascript代碼:

// user fill both fields, user name and memberpassword, so form can be submitted 
    jQuery("#formLogin").submit(function(e){  
     e.preventDefault(); 

     var memberusername = jQuery(this).find("#memberusername").val(); 
     var memberpassword = jQuery(this).find("#memberpassword").val(); 
     var obj = {memberusername: memberusername, memberpassword: memberpassword}; 
     var url = jQuery(this).attr("action"); 
     jQuery.post(url, obj, function(r){ 
      if(r.success) window.location.replace('http://www.example.net/memberAccount/memberDashboard'); 
      else jQuery('#errorMessageTop').fadeIn(); 
     }, 'json') 
    }) 

我收到錯誤遺漏的類型錯誤:無法讀取空

的特性「成功」就完了,這裏是用戶帳戶頁面上的輸出:

Array 
(
[session_id] => 711a8349fe7414802928ac27b7bd2c4f 
[ip_address] => 62.103.42.2 
[user_agent] => Mozilla/5.0 (Windows NT 6.1; rv:33.0) Gecko/20100101 Firefox/33.0 
[last_activity] => 1416509476 
[currentUser] => Array 
    (
     [authbackofficeuserID] => 428 
     [authbackofficeuserUserName] => mysuername 
     [authbackofficeuserPassword] => 69e3184e2cdc3605693ba24887c519aaafc89477 
     [authbackofficeuserEmail] => [email protected] 
     [authbackofficeuserFirstName] => My 
     [authbackofficeuserLastName] => Name 
     [isUserLoggedIn] => 1 
    ) 

) 

當前用戶是在後臺登錄的用戶的數據,但應找到的currentMember無處可查。

事情更奇怪,如果我註釋掉javascript,數據顯示在這裏的數組輸出。只要我刪除評論,並且我退出,當我嘗試再次登錄時,該數據(currentMember)就消失了。

任何幫助將深表謝意。

的問候,約翰

+0

你怎麼樣跟蹤CI會話?數據庫或cookie? – Sparky 2014-11-21 00:49:00

回答

0

我想你錯過$查詢 - > result_array();

$members = $query->result_array(); 

if(count($members) != 0){ 
//set your session logic here 
} 

請記住使用MVC;我看你是混合$這個 - >分貝功能(模型)和$這個 - > form_validation功能(控制器)

if ($this->form_validation->run() != FALSE) { 
     $this->db->where('memberUserName', $this->input->post('memberusername')); 
     $this->db->where('memberOldPassword', strtoupper(md5("EBOSS/".$this->input->post('memberpassword')."/EBOSS"))); 
     $query = $this->membersModel->get(); 
     $members = $query->result_array(); 

     if(count($members) != 0){ 
      $data = array(
       'memberID'      => $members[0]['memberID'], 
       'memberUserName'    => $members[0]['memberUserName'], 
       'memberOldPassword'    => $members[0]['memberOldPassword'], 
       'memberEmail'     => $members[0]['memberEmail'], 
       'isUserLoggedIn' => TRUE 
      ); 
      $this->session->set_userdata('currentMember', $data); 
      echo json_encode(array("success" => true)); 
     }else { 
      echo json_encode(array("success" => false, "error" => "Wrong credentials")); 
     } 

} else {  
    echo json_encode(array("success" => false, "error" => "Incorrect inputs")); 
} 

,並檢查您memberDashboard控制器進行會話

+0

我發現我改變了JavaScript ...如果(真)window.location.replace('http://www.example.net/memberAccount/memberDashboard');並導致任何用戶名和密碼爲真。行現在是如果(r.success)window.location.replace('http://www.example.net/memberAccount/memberDashboard');現在我收到以下錯誤:Uncaught TypeError:無法讀取屬性'成功'null – user2417624 2014-11-20 22:11:28

+0

我現在將編輯該問題...如果您有任何想法,只需發佈​​它。我超過14個小時在這... ...我會在這裏,直到我解決它。 – user2417624 2014-11-20 22:12:26