CodeIgniter - Сессия не работает при перенаправлении на другой контроллер - PullRequest
0 голосов
/ 07 февраля 2020

Сессия не работает при перенаправлении с одного контроллера на другой. В приведенном ниже примере я просто пытаюсь проверить вход в систему и, если действительный пользователь, затем установить имя пользователя для сеанса с контроллера с именем «Логин» и перенаправить на другой контроллер «Тестирование» и распечатать значение сеанса. Но, когда пользователь проверен, сессия работает нормально, пока мы не находимся в контроллере входа (я проверил, поставив print_r($this->session->userdata('username'));, удалив метод перенаправления) и когда я перенаправляю, значение сеанса отображается пустым от перенаправленного контроллера.

Вот пример моего кода:

Контроллер: Логин. php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Login extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->model('M_login');  
        $this->load->helper('url');
        $this->load->library('session');
        $this->load->helper('form');
    }
    public function index()
    {
        $u=$this->session->userdata('username');
        if($u) {
            redirect('Testing');
        } else {
            $this->load->view('login');
        }
    }
    public function login_form()
    {
        $this->form_validation->set_rules('username', 'Username', 'required');
        $this->form_validation->set_rules('password', 'Password', 'required');
        $this->form_validation->set_error_delimiters('<span class="error">', '</span>');

        if($this->form_validation->run()==FALSE)
        {
            $this->load->view('login');
        }
        else{
            $result = $this->M_login->takeUser();
            if(count($result)>0)
            {
                $user = $this->input->post('username', TRUE);

                $this->session->set_userdata('username', $username);

                redirect('Testing');
            }
            else{
        ?>
            <script>            
            alert('Failed Login: Check your username and password!');       
            history.go(-1);         
            </script>   
        <?php   
            }   
        }
    }
    public function logout()
    {
        $this->session->sess_destroy();
        redirect('login/login_form');
    }
}

Модель: M_login. php

 <?php
defined('BASEPATH') OR exit('No direct script access allowed');

class M_login extends CI_Model

{

    public function __construct()
    {
        parent::__construct();
    }

    public function takeUser()  
    {   
        $username = $this->input->post('username');
        $password1 = $this->input->post('password');
        $password = md5($password1);

        $this->db->select('username');  
        $this->db->from('employee');    
        $this->db->where('username', $username);    
        $this->db->where('password', $password);    
        $result = $this->db->get();
        return $result->row_array();
    }
}

Контроллер: Тестирование. php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Testing extends CI_Controller
{
     public function __construct(){
        parent::__construct();
        $this->load->library('session');
    }

    public function index() {
        print_r($this->session->userdata('username'));

    }

}

Также у меня есть сеанс автозагрузки:

$autoload['libraries'] = array('database','session','form_validation', 'pagination', 'user_agent','encryption');

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

переменная $ username не определена в функции login_form (), просто измените

$username = $this->input->post('username', TRUE);

$this->session->set_userdata('username', $username);

или просто одной строкой

if(count($result)>0)
        {
            $this->session->set_userdata('username', $this->input->post('username'));
            redirect('Testing');
        }

это работает, я проверил.

0 голосов
/ 09 февраля 2020

Возможно, проблема в этих строках кода из Login. php

$user = $this->input->post('username', TRUE);

$this->session->set_userdata('username', $username);

Обратите внимание, что переменная $user установлена ​​со значением $_POST['username'], но затем с содержимым $username сохраняется в сеансе.

Попробуйте это

$user = $this->input->post('username', TRUE);

$this->session->set_userdata('username', $user);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...