Сессии Codeigniter не отображают данные

В моем коде есть следующая ошибка: 1) данные, которые я храню во время сеанса, не отображаются в поле зрения 2) правила набора проверки формы не работают .. Требуемый не работает. Всякий раз, когда я нажимаю логин, не вводя никаких полей, он печатает.

У меня есть автоматическая загрузка сеанса и проверка формы.

Должен ли я использовать сеансы php или сеансы ci?

Контроллер:

public function loginFormValidation()
      {
          $this->form_validation->set_rules('email','Username','required'); //not working
          $this->form_validation->set_rules('pass','Password','required');
          $this->form_validation->set_error_delimiters('<div class = "text-danger">', '</div>');

          if ($this->form_validation->run())
          {
              $email = $this->input->post('email');
              $pass = $this->input->post('pass');

              $this->load->model('loginModel');
              $result = $this->loginModel->loginValidation($email,$pass);

              $user_id = $result->user_id;
              $user_name = $result->user_name;
              $password = $result->password;



              $arrayDb = array(
                  'user_id' => $user_id,
                  'user_name' => $user_name,
                  'password' => $password,
              );

              $this->session->set_userdata('row', $arrayDb);

              header("location:".base_url()."/Users/dashboard");

          }
          else
          {
              echo "a";
          }
      }

Модель:

class loginModel extends CI_Model
{
    public function loginValidation($email,$pass)
    {
        $q = $this->db->where(['email' => $email, 'password' => $pass])
            ->get('users');

        if ($q->num_rows())
        {
            return $q->row();
        }
        else
        {
            return false;
        }
    }
}

Контроллер, на котором я печатаю его для тестирования:

class Users extends CI_Controller
{
    public function dashboard()
    {
        echo $this->session->userdata('user_name');  // Empty no data showing
        exit;
    }
}

проверка формы работает ... вы ничего не вводите, а отображается ...

Alex 24.09.2018 00:16

он не работает .. поле установлено на обязательное ... он меня ни о чем не спрашивает

Adnan Anwar 24.09.2018 00:25

"всякий раз, когда я нажимаю" Войти "без ввода каких-либо полей, он говорит" это точное условие, которое вы закодировали. проверка формы не выполняется, например пустые поля, иначе условие запускается, отображается эхо

Alex 24.09.2018 00:26

хорошо, я понял .. форма _validation работает нормально ... спасибо

Adnan Anwar 24.09.2018 00:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашем коде есть несколько ошибок и упущений.

  1. НИКОГДА не следует хранить пароли в виде открытого текста, не говоря уже о добавлении их в переменную сеанса. В этом нет необходимости. Выезд: http://php.net/manual/en/function.password-verify.php
  2. Вам нужно проверить, действительно ли функция входа в систему вернула данные, иначе любой может «войти», если он прошел проверку формы.
  3. Вы неправильно устанавливаете данные сеанса с массивом в соответствии с тем, как вы хотите получить доступ к переменным.

Контроллер:

public function loginFormValidation() {
    $this->form_validation->set_rules('email', 'Username', 'required');
    $this->form_validation->set_rules('pass', 'Password', 'required');
    $this->form_validation->set_error_delimiters('<div class = "text-danger">', '</div>');

    if ($this->form_validation->run()) {
        $email = $this->input->post('email');
        $pass = $this->input->post('pass'); // do not store plaintext!!!

        $this->load->model('loginModel');
        $result = $this->loginModel->loginValidation($email, $pass);

        if ($result) {
            $user_id = $result->user_id;
            $user_name = $result->user_name;
            $password = $result->password;
            //https://www.codeigniter.com/user_guide/libraries/sessions.html#adding-session-data
            $arrayDb = array(
                'user_id' => $user_id,
                'user_name' => $user_name,
                'password' => $password, // why are you storing their PLAINTEXT password in a session?!
            );
            $this->session->set_userdata($arrayDb);
            header("location:" . base_url() . "/Users/dashboard");
        } else {
            echo 'login failed; bad username/password.';
        }
    } else {
        echo validation_errors();
    }
}

Модель:

public function loginValidation($email, $pass) {
    $q = $this->db->where(['email' => $email, 'password' => $pass])
            ->get('users');
    if ($q->num_rows() == 1) {
        return $q->row();
    }
    return false;
}

Вместо того, чтобы изобретать колесо, попробуйте: https://github.com/benedmunds/CodeIgniter-Ion-Auth Я лично использую его и рекомендую.

Я сохраню пароль в зашифрованном виде, но я просто тестировал, поскольку мои сеансы не работают ... функция модели входа в систему возвращает данные, которые я проверил ...

Adnan Anwar 24.09.2018 00:36

затем обратите внимание, как я добавляю массив сеанса

Alex 24.09.2018 00:39

да, это сработало ... спасибо ... так в чем была настоящая ошибка в моем коде, вы можете объяснить? и кто я могу проверить, настроен ли сеанс?

Adnan Anwar 24.09.2018 00:50

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

Alex 24.09.2018 00:52

Я добавлял ключ, так как хочу использовать эту функцию isset ($ _ SESSION ['some_name']); Как я могу это использовать?

Adnan Anwar 24.09.2018 00:54

Вы назначали переменные сеанса массиву, называемому строками, например. $ _session ['rows'] ['user_id'], но вы хотели $ _session ['user_id'] ... И да, вы можете получить к нему доступ, используя глобальную переменную $ _session. Хотя я бы посоветовал использовать данные пользователя, поскольку они не дают вам undefined index error, если вы не проверяете, установлен ли isset, и вместо этого возвращает null, если null без ошибок.

Alex 24.09.2018 01:01

Другие вопросы по теме