繁体   English   中英

CodeIgniter - 重定向到其他控制器时会话不起作用

[英]CodeIgniter - Session not working when redirecting to other Controller

从一个控制器重定向到另一个控制器时,会话不起作用。 在下面的示例中,我只是尝试检查登录,如果用户有效,则从名为“登录”的控制器将用户名设置为会话,并重定向到另一个控制器“测试”并打印会话值。 但是,当用户被验证时,会话工作正常,直到我们进入登录控制器(我通过放置print_r($this->session->userdata('username'));通过删除重定向方法进行检查),当我重定向时,重定向的控制器中的会话值显示为空。

这是我的代码示例:

控制器:Login.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();
    }
}

控制器:Testing.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');

问题可能出在 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);

变量 $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');
        }

它正在工作,我检查过。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM