Codeigniter - сохранение результатов базы данных в сеансе - PullRequest
1 голос
/ 01 марта 2011

Привет, я хочу сохранить некоторую информацию о сеансе из запроса к базе данных при входе в систему, но по какой-то причине он не позволяет мне устанавливать пользовательские данные сессии!?!

Кто-нибудь может пролить свет на то, почему?

Контроллер:

function validate_login(){
$this->load->library('form_validation');
$this->form_validation->set_rules('email_address', "Email address","required|valid_email");
$this->form_validation->set_rules('password', "Password", "trim|required|min_length[6]|max_length[32]");

if($this->form_validation->run() == FALSE){

  $this->login();

} else {

  $email_address = $this->input->post('email_address');
  $password = md5($this->input->post('password'));
  $prev_page = $this->input->post('referrer');

  $found_user = $this->account_model->validate_user($email_address, $password); // calls to function of the same name in the model, returns array.

  if($found_user){

    $session_data = array(
      'user_id' => $found_user->user_id,
      'is_logged_in' => TRUE
    );

    // Debug code

      if($this->session->set_userdata($session_data)){
        echo "success session";
        } else {
        echo "failure session";
      }

  } else {
    //Debug code
    echo 'no user found';
  }
}
}

Модель:

  function validate_user($email_address, $password){

$this->db->where('email_address', $email_address);
$this->db->where('password', $password);
$query = $this->db->get('user');

if($query->num_rows() == 1){

   foreach($query->result() as $row){
        $data = $row;
      }
      return $data;

} else {
    return FALSE;
}

}

Ответы [ 2 ]

1 голос
/ 01 марта 2011

Я публикую это как другой ответ, просто чтобы вставить этот фрагмент кода.Я думаю, что все работает так, как должно быть.Функция set_userdata возвращает void, поэтому вам не нужно инкапсулировать ее в оператор if.

Вместо следующего кода:

if($this->session->set_userdata($session_data)){
    echo "success session";
    } else {
    echo "failure session";
  }

Это должно быть просто:

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

Вы можете использовать эту функцию для добавления новых данных или изменения существующих данных в сеансе;не имеет значения, если в нем уже есть данные.

Другой ответ:

Загружаете ли вы библиотеку сеансов?Будучи широко используемой библиотекой, я бы порекомендовал загрузить ее в конфигурационный файл автозагрузки, например:

$autoload['libraries'] = array('session', 'other libraries etc');
0 голосов
/ 01 марта 2011

решаемые !!

Что ж, похоже, теперь это работает, я думаю, что проблема, возможно, была в том, что set_userdata уже был установлен!

хотя я не знаю, почему он возвращает FALSE, если я обновляю или добавляю данные, которые были там. Я позаботился о том, чтобы все данные сеанса были уничтожены, и удалил условные выражения, и теперь у меня, похоже, постоянный сеанс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...