我正在尝试在验证用户的所有凭据时从控制器设置codeigniter中的会话。我在登录控制器的方法中有这个代码。方法'login_check
'由form_validation的set rules方法调用为回调函数。我尝试了一切可能的方法,但出于某种原因,根据CI的手册,我无法设置应该是直接任务的会话
注意:会话在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";
}
}
当我输入正确的凭据并且它们在数据库中匹配时,我会收到输出为“错误设置会话”。
答案 0 :(得分:2)
从$data
删除单引号。它是一个数组变量。试试这个,
if (!$this->session->set_userdata('logged_in', $data))
echo "error setting session";
答案 1 :(得分:1)
因为$data
是一个数组..试一试
if (!$this->session->set_userdata('logged_in', $data))
echo "error setting session";
答案 2 :(得分:0)
当我更改config.php文件中的加密密钥时,我设法使其工作。在涉及“_”之前的加密密钥和新的加密密钥只有字母字符。
答案 3 :(得分:0)
在codeigniter中使用session基于数组,要在控制器构造函数中手动初始化Session类,请使用$ this-> load->库函数:
$this->load->library('session');
会话数组的一个有用方面是您可以将自己的数据添加到它,它将存储在用户的cookie中。你为什么想做这个?这是一个例子:
假设某位特定用户登录您的网站。经过身份验证后,您可以将他们的用户名和电子邮件地址添加到会话cookie中,使您可以全局使用这些数据,而无需在需要时运行数据库查询。
要将数据添加到会话数组,需要将包含新数据的数组传递给此函数
$this->session->set_userdata($array);
其中$ array是包含新数据的关联数组。这是一个例子:
$newdata = array(
'username' => 'johndoe',
'email' => 'johndoe@some-site.com',
'logged_in' => TRUE
);
$this->session->set_userdata($newdata);
使用以下函数可以获得会话数组中的任何信息:
$this->session->userdata('item');
例如:
if(!$this->session->userdata('logged_in')) {
//do what you wanna do
}