2014-11-20 294 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