Как получить данные сеанса в codeigniter? - PullRequest
0 голосов
/ 19 мая 2019

Я пытаюсь создать процесс входа в систему с использованием каркаса codeigniter. Проверка формы работает, но есть проблема в сеансе. Я не могу получить имя пользователя после "Welcome -".

контроллер: Main.php

<?php 
    class Main extends CI_Controller
    {

        public function login()
        {
            $this->load->view('login');
        }



        public function login_validation()
        {
            $this->form_validation->set_rules('username','Username','required');
            $this->form_validation->set_rules('password','Password','required');

            if ($this->form_validation->run()) 
            {
                $username = $this->input->post('username');
                $password= $this->input->post('password');
                //model 
                $this->load->model('myModel');
                if ($this->myModel->can_login($username,$password))
                {
                    $session_data =  array('username' =>  $username);
                    $this->session->set_userdata('$session_data');
                    redirect(base_url().'main/enter');
                }
                else
                {
                    $this->session->set_flashdata('error','Invalid Username Or Password');
                    redirect(base_url().'main/login');
                }
            }
            else
            {
                $this->login();
            }

        }

        function enter()
        {
            if ($this->session->userdata('username')!=' ')
            {
                echo '<h2> Welcome- '.$this->session->userdata('username').'</h2>';
                echo '<a href="'.base_url().'main/logout">Logout</a>';
            }
            else
            {
                redirect(base_url().'main/login');
            }
        }

        function logout()
        {
            $this->session->unset_userdata('username');
            redirect(base_url().'main/login');
        }

    }
?>

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

Я предлагаю небольшую перестановку кода для enter(), которая обеспечивает лучший тест для имени пользователя с использованием чуть-чуть меньшего кода.

    function enter()
    {
        if(empty($this->session->userdata('username')))
        {
            //base_url() accepts URI segments as a string. 
            redirect(base_url('main/login')); 
        }

        // The following code will never execute if `redirect()` is called
        // because `redirect()` does not return, it calls `exit` instead. 
        // So, you do not need an `else` block
        echo '<h2> Welcome- '.$this->session->userdata('username').'</h2>';
        echo '<a href="'.base_url().'main/logout">Logout</a>';
    }

empty() будет true для пустой строки, NULL, False и пару других вещей.В этом случае вас больше всего интересует пустая строка или NULL.(empty() документация ЗДЕСЬ .)

Возможно, вы захотите добавить «trim» в ваши правила проверки, потому что он удаляет пустые пробелы из входной строки.Это исключит возможность того, что кто-то попытается ввести имя пользователя, используя только пробелы.

В противном случае ваш код должен работать.Если это не так, то, скорее всего, у вас не настроены сеансы CodeIgniter должным образом.На вопросы о переполнении стека можно найти ответы на многие вопросы по настройке сеанса.

0 голосов
/ 19 мая 2019

Добавить библиотеку сессий в конструктор

 <?php 
        class Main extends CI_Controller
        {

        public function __construct()
            {
                parent::__construct();
                // Load form helper library
                $this->load->helper('form');

                // Load form validation library
                $this->load->library('form_validation');

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

                $username = $this->session->userdata('username');

                if (empty($username)) {
                    redirect('main/logout');
                }
            }
    }

Еще один способ загрузить библиотеку сессий в файл autoload.php

Расположение файла: application / config / autoload.php

$autoload['libraries'] = array('database', 'email', 'session');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...