CodeIgniter - Как я могу получить сеанс, чтобы определить, вошел ли пользователь в систему? - PullRequest
0 голосов
/ 13 сентября 2018

У меня очень простая страница, для просмотра которой необходимо войти в систему.У меня есть контроллер входа в систему и просмотр, который будет перенаправлен на главную страницу после успешного входа в систему.Тем не менее, я хочу определить, вошел ли пользователь в систему, если пользователь имеет прямой доступ к главной странице, если он не вошел в систему, а затем следует перенаправить пользователя обратно на страницу входа.

Мой контроллер входа в систему:

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

class Login extends CI_Controller {  

    public function index()  
    {  
        $this->load->view('login_view');  
    }  
    public function process()  
    {  
        $user = $this->input->post('user');  
        $pass = $this->input->post('pass');  
        if ($user=='admin' && $pass=='123')   
        {  
            $this->session->set_userdata(array('user'=>$user));  
            redirect("Report");
        }  
        else{  
            $data['error'] = 'Your Account is Invalid';  
            $this->load->view('login_view', $data);  
        }  
    }  
    public function logout()  
    {  
        $this->session->unset_userdata('user');  
        redirect("Login");  
    }  
}  
?>  

и мой вид входа в систему:

<!DOCTYPE html>  
<html>  
<head>  
    <title>Login Page</title>  
</head>  
<body>  
    <?php echo isset($error) ? $error : ''; ?>  
    <form method="post" action="<?php echo base_url('Login/process'); ?>">  
        <table cellpadding="2" cellspacing="2">  
            <tr>  
                <td><th>Username:</th></td>  
                <td><input type="text" name="user"></td>  
            </tr>  
            <tr>  
                <td><th>Password:</th></td>  
                <td><input type="password" name="pass"></td>  
            </tr>  
            <tr>  
                <td> </td>  
                <td><input type="submit" value="Login"></td>  
            </tr>  
        </table>  
    </form>  
</body>  
</html>  

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

основной контроллер:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class EstoreReport extends CI_Controller {

public function __construct() {
  parent::__construct();
  $this->load->model('ReportModel');
}

public function index()
{
   $report=new ReportModel;
   $data['data']=$report->get_report();
   $this->load->view('includes/header');
   $this->load->view('Report/list',$data);
   $this->load->view('includes/footer');
}

Ответы [ 7 ]

0 голосов
/ 13 сентября 2018

Вы можете использовать $this->session->has_userdata() согласно CI документы

So

// Write a boolean returning method
/**
* Returns if there is a user session
*
* @return bool
*/
public function isLoggedIn()
{
    return $this->session->has_userdata($some_defined_key_like_user_id);
}

...

// Then in your index controller method
/**
* Index controller method
*
* @return void
*/
public function index()
{
    $this->isLoggedIn() ? $this->load()->view('login') : redirect("Report");
}
0 голосов
/ 14 сентября 2018

Просто настройте в вашем контроллере index():
Используйте $this->session->userdata('user') == NULL, чтобы проверить, вошел ли пользователь в систему

 public function index()
 {
   if($this->session->userdata('user') == NULL)
   { 
      redirect('Login');
   }
   else
   {
      $report=new ReportModel;
      $data['data']=$orders->get_report();
      $this->load->view('includes/header');
      $this->load->view('Report/list',$data);
      $this->load->view('includes/footer');
   }
}
0 голосов
/ 13 сентября 2018

Предполагая, что у вас есть автозагрузка помощника сеанса, так же как и проверка на контроллере Login, вы можете установить проверку в методе index контроллера Main / Report:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class EstoreReport extends CI_Controller {

public function __construct() {
parent::__construct();
$this->load->model('ReportModel');
}

public function index()
{
    if (!isset($this->session->userdata('user'))) {
        redirect("Login");  
    } else {
        $report=new ReportModel;
        $data['data']=$report->get_report();
        $this->load->view('includes/header');
        $this->load->view('Report/list',$data);
        $this->load->view('includes/footer');
    }
}
0 голосов
/ 13 сентября 2018

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

    class Login extends CI_Controller {

        public function __construct() {
            parent::__construct();
            $this->load->model('loginmodel', 'login');
            $this->load->library('form_validation');
        }

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

        // Check for user login process
        public function user_aouth() {

            $this->form_validation->set_rules('username', 'Username', 'trim|required');
            $this->form_validation->set_rules('password', 'Password', 'trim|required');

            if ($this->form_validation->run() == FALSE) {
                $this->session->set_flashdata('error', 'Invalid Username and Password');
                redirect('login');
            } else {
                $username = $this->input->post('username');
                $password = $this->input->post('password');
                $data = array(
                    'username' => $username,
                    'password' => $password
                );
                if ($this->login->check_valid_user_details($data)) {
                    $session_data = array(
                        'username' => $username
                    );
                    $this->session->set_userdata($session_data);
//redirect to admin user dashboard
                    redirect('dashboard');
                } else {
                    $this->session->set_flashdata('error', 'Invalid Username and Password');
                    redirect('login');
                }
            }
        }

        public function logout() {
            $this->session->unset_userdata('username');
            $this->session->sess_destroy();
            redirect('login');
        }

    }

В вашей модели входа в систему

public function check_valid_user_details($data) {
        $condition = "username=" . "'" . $data['username'] . "'" . "AND password=" . "'" . $data['password'] . "'";
        $c = $this->db->select('*')
                ->from('admin')
                ->where($condition)
                ->limit(1);
        $query = $this->db->get();

        if ($query->num_rows() == 1) {
            return $query->result();
        } else {
            return FALSE;
        }
    }

Используйте это в верхней части каждой страницы под панелью инструментов

 if($this->session->userdata('username') == NULL){ 
     redirect('login');
} 
0 голосов
/ 13 сентября 2018

контроллер

public function index()
{
    //redirect to dashboard
    $this->dashboard();
}
public function dashboard()
{ //session wise operating isset session-> dashboard ,else login page
    if ($this->session->userdata('userName')) {
         //if user found
        return $this->load->view('dashboard');
    } else {
        //if "no user found"
        return $this->load->view('login');
    }
}
public function login_check()
{ //functions retrives two values 1-user type 2-userId
    $data['userdata'] = $this->Mdl_login->Login_check();

    if ($data['userdata'] == false) {
        $this->load->view('login', $data);
    } else {
        redirect(base_url('index.php/dashboard'), 'refresh');
    }
}
function logout()
{ //session destroy function
    $this->session->unset_userdata('userName');
   redirect(base_url(), 'refresh');
}

Модель

 function Login_check()
{
    $username = $this->input->post('UserName');
    $password = $this->input->post("PassWord");

    //check with your value 
    $this->db->where('userName', $username);
    $this->db->where('password', $password);
    $qry_getuserdata = $this->db->get('user_tbl');
    if ($qry_getuserdata->num_rows() > 0) {
        $result = $qry_getuserdata->result();
        $userid = $result[0]->userId;
        $usertype = $result[0]->userType;
        $email = $result[0]->email;
        $this->session->set_userdata('userName', $username);
        $this->session->set_userdata('userId', $userid);
        $this->session->set_userdata('userType', $usertype);
        $this->session->set_userdata('email', $email);
        return true;
    } else {
        return false;
    }
}

Теперь вы можете получить доступ к своим данным сеанса в любом месте

if(isset($_SESSION['userName'])){ $data['userName']= $_SESSION['userName']; }
0 голосов
/ 13 сентября 2018

Вы можете создать функцию и вызвать ее, чтобы проверить, вошел ли пользователь в систему или нет

 public function is_logged_in()
    {
        $user = $this->session->userdata('user_data');
        return isset($user);
    }
0 голосов
/ 13 сентября 2018

Вы можете иметь значение true или false из нижнего вызова функции, вызвать эту функцию в вашем контроллере и затем перенаправить согласно ответу.

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