2013-02-22 49 views
0

我想在验证用户的所有凭据时从控制器设置codeigniter中的会话。我在我的登录控制器的方法中有这个代码。方法'login_check'被form_validation的set rules方法调用为回调函数。我尝试一切可能的方式,但由于某种原因,我不能设置应该是根据CI手册codeiginiter设置会话错误

注意一个简单的任务会话:会话在autoload.php

$this->form_validation->set_rules('password', 'password', 'trim|required|callback_login_check'); 


public function login_check($password) { 
    $this->load->library('session'); 
    //Field validation succeeded.  Validate against database 
    $username = $this->input->post('username'); 
    $this->load->model('industry_person'); 

    //query the database 
    $query = $this->industry_person->check_login($username, $password); 

    if (!$query) { 
     $this->form_validation->set_message('login_check', 'Invalid username or password'); 
     return false; 
     $this->index(); 
    } else { 
     $data = array(
      'username' => $username, 
      'is_logged_in' => true 
     ); 
     if (!$this->session->set_userdata('logged_in', $data)) 
      echo "error setting session"; 

    } 
} 

我自动加载当我输入正确的证书并且它们在数据库中匹配时接收输出为'错误设置会话'。

+1

你已经设置的加密密钥,对? – 2013-02-22 12:54:14

+1

'if(!$ this-> session-> set_userdata('logged_in','$ data'))'$ data引用了它 - 不应该 - 它是一个包含数组的变量。另外,set_userdata只接受数组,而不是你正在传递的tring'logged_in'。 – 2013-02-22 12:55:38

+0

是的,我已经设置了加密密钥 – Sahil 2013-02-22 12:57:57

回答

2

删除单引号$data。它是一个数组变量。试试这个,

if (!$this->session->set_userdata('logged_in', $data)) 
      echo "error setting session"; 
+0

是的,你传递的数据是一个字符串,而不是一个数组。 – 2013-02-22 12:54:51

+0

哦,对不起,它已被删除,但当我编辑它在stackoverflow,我忘了删除单引号。 – Sahil 2013-02-22 12:55:35

1

因为$data是一个数组..给一个尝试

if (!$this->session->set_userdata('logged_in', $data)) 
      echo "error setting session"; 
0

我设法让我改变了config.php文件加密密钥它的工作。涉及'_'之前的加密密钥和新的只有字母字符。使用笨会话

0

是基于在阵列上,为了初始化会话类在你的控制器构造手动,使用$这 - >负载>库函数:

$this->load->library('session'); 

会话的一个有用的方面数组就是您可以将自己的数据添加到数据中,并将其存储在用户的Cookie中。你为什么想做这个?这里有一个例子:

让我们说一个特定的用户登录到您的网站。一旦通过身份验证,您就可以将他们的用户名和电子邮件地址添加到会话cookie中,从而使您无需在需要时运行数据库查询即可在全球范围内使用这些数据。

若要将数据添加到会话阵列包括使你的新数据数组这个功能

$this->session->set_userdata($array); 

其中$数组是你的新数据的关联数组。这里有一个例子:

$newdata = array(
        'username' => 'johndoe', 
        'email'  => '[email protected]', 
        'logged_in' => TRUE 
       ); 

$this->session->set_userdata($newdata); 

从session数组的任何信息,请使用以下功能:

$this->session->userdata('item'); 

如:

if(!$this->session->userdata('logged_in')) { 
    //do what you wanna do 
}