簡體   English   中英

codeigniter沒有在另一個控制器中檢索會話

[英]codeigniter not retrieving session in another controller

我完全被困在這里,我創建了一個控制器登錄,它獲得了,使用DB設置規則和認證,並在代碼結束時設置了會話。 此外,我還有另一個顯示儀表板的控制器儀表板,還必須使用會話來查看是否設置了會話,如果真用戶可以使用控制器,則重定向到登錄頁面。 就是這樣但我無法在儀表板中獲取會話,我該怎么辦?

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

class Login extends CI_Controller
{

    /**
     * Login constructor.
     */
    public function __construct()
    {
        parent::__construct();

        //Load Form helper
        $this->load->helper('form');

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

    /**
     *Display Login page
     */
    public function index()
    {

        $title['title'] = 'Admin login';
        $this->load->view('login', $title);
    }


    /**
     *
     * Set rules for authentication
     *
     * @return bool
     */
    public function rules()
    {

        $rules = array(
            array(
                'field' => 'username',
                'label' => 'Username',
                'rules' => 'trim|required|xss_clean'
            ),
            array(
                'field' => 'password',
                'label' => 'Password',
                'rules' => 'trim|required|xss_clean'
            ),
            array(
                'field' => 'remember',
                'label' => 'Remember',
                'rules' => 'trim|int|xss_clean'
            )
        );

        $this->form_validation->set_rules($rules);

        if ($this->form_validation->run() != FALSE) {
            $this->authentication();
        } else {

            $title['title'] = 'Admin login';
            $this->load->view('login', $title);
        }
    }

    /**
     * Check if user is exist
     */
    public function authentication()
    {

        $data = array(
            'username' => $this->input->post('username', true),
            'password' => $this->input->post('password', true)
        );

        $this->load->model('userData');
        if ($this->userData->getUserData($data) == FALSE) {

            $title['title'] = 'Admin login';
            $this->load->view('login', $title);
        } else {

            $this->set_session($data);
            redirect('dashboard/index');
        }

    }

    /**
     * @param $data username|password
     */
    public function set_session($data)
    {

        $session_data = array(
            'username' => $data['username'],
            'login' => true
        );

        $this->session->set_userdata('auth', $session_data);
    }

}

這是儀表板:

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


class Dashboard extends CI_Controller{

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

    }

    /**
     * Display dashboard 
     */
    public function index(){


        $array = $this->session->userdata('auth');
        $login = $array['login'];

        if ($login == true) {
            $title['title'] = 'Dashboard';
            $this->template->load('panel/dashboard', $title);
        }else{
            redirect('login/index');
        }     
    }
}

你做錯了。 您無法在函數外部訪問$_post值。 你也不需要authentication()函數。

當你調用這個函數if ($this->form_validation->run() != FALSE)並且如果它的PASS,那么在這里添加``authentication()`函數代碼。 然后你可以設置會話。


代碼示例

$this->form_validation->set_rules($rules);

if ($this->form_validation->run() != FALSE) {
    $data = array(
        'username' => $this->input->post('username', true),
        'password' => $this->input->post('password', true)
    );

    $this->load->model('userData');
    if ($this->userData->getUserData($data) == FALSE) { # Uncler this point

        $title['title'] = 'Admin login';
        $this->load->view('login', $title);
    } else {

        $this->set_session($data);
        redirect('dashboard/index');
    }
} else {

    $title['title'] = 'Admin login';
    $this->load->view('login', $title);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM