2012-01-29 68 views
0

我正在编写我的第一个CI项目并尝试编写一个loginscript。一切工作几乎没有问题,除了会议用户数据不可用(甚至不是如果我检查我的Cookie /会话在Firefox中)。CodeIgniter Session Userdate似乎不存在

我不明白为什么会话userdata只有在登录后才可用,但如果我再次加载相同的页面(不是刷新,而是一个新的负载),我希望我仍然会登录,但我'米注销?即使我尝试读取会话userdata它不存在。

我简化我的脚本实例版本的计算器。谁能告诉我这个会议问题可以如何解决?

问候, 圭多

<?php 
class Test extends CI_Controller 
{ 

    function index() 
    { 
     $logged_in = $this->is_logged_in(); 
     if($logged_in) { 
      echo "You are logged in. <a href='test/logout'>Logout</a> | <a href='../'>Return to index</a>"; 
     } 
     else { 
      echo "You are logged out"; 
      echo form_open('test/check_login'); 
      echo "Email: ".form_input('email', set_value('email')); 
      echo "Password: ".form_password('password', set_value('password')); 
      echo form_submit('submit','Login'); 
      echo form_close(); 
     } 
    } 

    function is_logged_in() // check if user has logged in 
    { 
     // AUTOLOAD SESSIONS HAS SET in autoload.php-config >> $autoload['libraries'] = arra y('database', 'session', 'email'); 
     $is_logged_in = $this->session->userdata('is_logged_in');  
     if($is_logged_in) { 
      return TRUE; 
     } 
     else { 
      return FALSE; 
     } 
    } 

    function check_login() 
    { 
     $client_id = $this->validate(); 
     if(is_numeric($client_id)) // if the user's credentials validated then user exists 
     { 
      $data = array(
       'client_id' => $client_id, 
       'is_logged_in' => true 
      ); 
      $this->session->set_userdata($data); 
     }  
     $this->index(); 
    } 

    // normally we put this function in a model, but for this example we put it here. 
    function validate() // check if user exists in database 
    { 
     $this->db->where('email', $this->input->post('email')); 
     $this->db->where('password', md5($this->input->post('password'))); 
     $query = $this->db->get('client_users'); // this is our user table 

     if($query->num_rows == 1) // user exists 
     { 
      $row = $query->row(); 
      return $row->id_client; 
     } 
     else 
     { 
      return false; 
     } 
    } 

    function logout() 
    { 
     $this->session->sess_destroy(); // kill session, so user will be logged out. 
     redirect('/test'); 
    } 

} 
?> 

回答

0

您的验证功能的if语句应该是:

if($query->num_rows() == 1) // user exists 

你的()后NUM_ROWS冷落。

编辑:经过进一步审查,这应该不重要。唯一的其他东西我可以告诉也许是你的结果不等于1,该用户没有发现或你得到不止一个结果,既造成!== 1

+0

好吧,看来东西在本地主机上使用'会话'是错误的......但我不知道问题出现在哪里。 – 2012-01-31 19:43:27

+0

我已经解决了这个问题......这是一个'本地主机的事情。因为我在本地主机上测试,似乎CI的域设置必须是空的。 (请参阅http://codeigniter.com/forums/viewthread/209191/) – 2012-01-31 20:05:17