У меня это на контроллере с именем pages (я использую его как терминал для разветвления на все представления)
class pages extends MY_Controller {
public function verification(){
$session_data = $this->is_logged_in();
print_r($session_data);
if($this->is_logged_in()){}
}
}
Как видите, у меня есть строка ‘print_r’ для session_data, я получил некоторые результаты, проблема в том, что она всегда возвращает только ‘1’.
Это функция моего базового контроллера.
class MY_Controller extends CI_Controller {
public function __construct()
{
parent::__construct();
}
public function is_logged_in()
{
$user = $this->session->userdata();
return isset($user);
}
}
И это блок кода после входа в систему при создании данных сеанса на моем контроллере аутентификатора.
Class user_authentication extends MY_Controller {
public function register(){
$this->form_validation->set_rules('username', 'Username','required|trim|min_length[8]|max_length[24]|is_unique[user.username]',
array('required' => 'You have not provided %s.','is_unique' => 'This %s already exists.'));
$this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[8]|max_length[16]');
$this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email|min_length[6]|max_length[30]|is_unique[user.email]',
array('required' => 'You have not provided %s. ','is_unique' => 'This %s already exists.'));
$this->form_validation->set_rules('type', 'Account Type', 'trim|required|min_length[1]|max_length[1]',
array('required' => 'please select: 1 - normal, 2 - trainer'));
$this->form_validation->set_error_delimiters('', '');
if ($this->form_validation->run() == FALSE){
$this->load->view('templates/header');
$this->load->view('templates/navigation');
$this->load->view('pages/login');
$this->load->view('templates/footer');
}else{
$data = array('username' => $this->input->post('username'),
'password' => $this->input->post('password'),
'email' => $this->input->post('email'),
'type' => $this->input->post('type'));
$result = $this->Account_model->create_account($data);
if($result == true){
$data['message_display'] = 'Registration Successful';
$this->load->view('templates/header');
$this->load->view('templates/navigation');
$this->load->view('pages/homepage',$data);
$this->load->view('templates/footer');
}else{
$data['message_display'] = 'Username and/or Email already exists';
$this->load->view('templates/header');
$this->load->view('templates/navigation');
$this->load->view('pages/login',$data);
$this->load->view('templates/footer');}
}
}
public function login(){
$this->form_validation->set_rules('username', 'Username', 'required|trim|min_length[8]|max_length[24]');
$this->form_validation->set_rules('password', 'Password', 'required|trim|min_length[8]|max_length[16]');
if($this->form_validation->run() == FALSE){
$this->load->view('templates/header');
$this->load->view('templates/navigation');
$this->load->view('pages/login');
$this->load->view('templates/footer');}
else{
$data = array('username' => $this->input->post('username'), 'password' => $this->input->post('password'));
$result = $this->Account_model->login_account($data);
$session_data = array('username' => $result['username'], 'email' => $result['email'], 'type' => $result['type']);
$this->session->set_userdata('isloggedin',$session_data);
$data['title'] = 'home';
$this->load->view('templates/header');
$this->load->view('templates/navigation');
$this->load->view('pages/home');
$this->load->view('templates/footer');}
}
Есть некоторые вещи, которые на данный момент практически бесполезны, но я помещаю их туда для будущего использования. например, $ data [‘title’] будет использовать его в качестве заполнителя для заголовка в заголовке каждого представления, так как я использую шаблоны.
Я делаю что-то неправильно? Почему, когда я печатаю данные сеанса из MY_Controller, он возвращает только «1».
Я смотрел на руководства, но большинство из них устарели, и я, вероятно, использую устаревшие материалы из прошлых версий, если так любезно укажите их, я хочу попрактиковаться в программировании аккуратно и чисто.
Ваш подход не будет работать таким образом, потому что userdata возвращает массив по крайней мере с одним ключом __ci_last_regenerate (Я не уверен, какую версию CI вы используете, но если вы автоматически загрузите библиотеку сессий, вы всегда получите результат здесь)
Установить дополнительный ключ isLoggedin и у тебя все будет хорошо.
Ваша функция входа в систему:
public function login()
{
$this->form_validation->set_rules('username', 'Username', 'required|trim|min_length[8]|max_length[24]');
$this->form_validation->set_rules('password', 'Password', 'required|trim|min_length[8]|max_length[16]');
if($this->form_validation->run() == FALSE)
{
$this->load->view('templates/header');
$this->load->view('templates/navigation');
$this->load->view('pages/login');
$this->load->view('templates/footer');}
else
{
$data = array('username' => $this->input->post('username'), 'password' => $this->input->post('password'));
$result = $this->Account_model->login_account($data);
if ($result)
{
$session_data = array('username' => $result['username'], 'email' => $result['email'], 'type' => $result['type'], 'isLoggedin' => true);
$this->session->set_userdata($session_data);
$data['title'] = 'home';
$this->load->view('templates/header');
$this->load->view('templates/navigation');
$this->load->view('pages/home');
$this->load->view('templates/footer');
}
}
}
и ваш контроллер
class MY_Controller extends CI_Controller {
public function __construct()
{
parent::__construct();
}
public function is_logged_in()
{
return $this->session->userdata('isLoggedin');
}
}
При таком подходе вы получаете либо правильное значение, либо NULL, который возвращает true или false;
Для получения дополнительной информации вы можете посмотреть здесь
https://codeigniter.com/userguide3/libraries/sessions.html#CI_Session::userdata
Если вы хотите распечатать все данные вашего сеанса, используйте эту
print_r($this->session->all_userdata());
и эта часть
public function is_logged_in()
{
$user = $this->session->userdata();
return isset($user);
}
вернет 1 или 0;