Как исправить не работающую сессию в CodeIgniter-3 - PullRequest
0 голосов
/ 27 марта 2019

Я использую CodeIgniter 3.1.10 и попытался войти в систему с сеансом, используя учебник, который я нашел. Я думаю, что сеанс не работает, потому что, когда я нажал кнопку «Назад», страница загружается обратно на страницу входа, даже если я вошел в систему.

Вот форма из вида с именем login_view:

 <form action="<?php echo base_url('index.php/Login_controller/login')?>" method="post">

        <input type="text" placeholder="Username" name="username"  id="username"/>
        <input type="password" placeholder="password" name="password" id="password" />
        <div class="text-center">
            <input type="submit" name="submit" class="button" value="LOG IN" style="border-radius: 4px;border: none;">
            <a href="signup.html" target="_blank"><div class="button">Create an account</div></a>
        </div>
        <?php
        if($this->session->flashdata('error')){
          ?>
          <div class="alert alert-danger text-center" style="margin-top:20px;">
            <?php echo $this->session->flashdata('error'); ?>
          </div>
          <?php
        }
      ?>
      </form>

Login_controller.php:

  function __construct(){
        parent::__construct();
        $this->load->helper('url');
        $this->load->model('login_model');

    }

    public function index(){
        //load session library
        $this->load->library('session');

        //restrict users to go back to login if session has been set
        if($this->session->userdata('user')){

            redirect('ask_controller/index','refresh');
        }
        else{
            $this->load->view('login_view');
        }
    }

    public function login(){
        //load session library
        $this->load->library('session');

        $username = $_POST['username'];
        $password = $_POST['password'];

        $data = $this->login_model->login($username, $password);

        if($data){
            $this->session->set_userdata('user', $data);
            redirect('ask_controller');
        }
        else{
            header('location:'.base_url().$this->index());
            $this->session->set_flashdata('error','Invalid login. User not found');
        } 
    }

    public function home(){
        //load session library
        $this->load->library('session');

        //restrict users to go to home if not logged in
        if($this->session->userdata('user')){
            $this->load->view('ask_controller');
        }
        else{
            redirect('/');
        }

    }

    public function logout(){
        //load session library
        $this->load->library('session');
        $this->session->unset_userdata('user');
        redirect('/');
    }

Login_model.php:

 public function login($username, $password){
            $query = $this->db->get_where('user', array('username'=>$username, 'password'=>$password));
            return $query->row_array();
        }

Из config.php:

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

Я также добавил сессию в библиотеки автозагрузки. Используемое здесь имя таблицы - «пользователь».

Даже если я нажму «назад», он должен загрузить страницу, которую я ввел после входа в систему. Плюс, я получаю эту ошибку после входа в систему.

Error

1 Ответ

0 голосов
/ 27 марта 2019

Надеюсь, это поможет вам

public function login(){
    //load session library
    $this->load->library('session');

    $username = $_POST['username'];
    $password = $_POST['password'];

    $data = $this->login_model->login($username, $password);

    if($data){
        $this->session->set_userdata('user', $data);
        redirect('ask_controller');
    }
    else{

        $this->session->set_flashdata('error','Invalid login. User not found');
        header('location:'.base_url().$this->index());
    } 
}

нужно заменить строку

header('location:'.base_url().$this->index());
$this->session->set_flashdata('error','Invalid login. User not found');

К

 $this->session->set_flashdata('error','Invalid login. User not found');
 header('location:'.base_url().$this->index());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...