会话检查无法正常工作 - CodeIgniter

Session check Not working Properly - CodeIgniter

我已将 login 控制器设置为默认控制器

在我的模型 Membership 中,我有一个函数 checkLogin() returns true 如果会话有有效数据。

方法 checkLogin() 工作正常。

我在构造函数中调用 checkLogin() 方法,如下所示。

方法 checkLogin() 工作正常,但我不确定为什么当我加载 Login/postSignin 该方法没有重定向到应用程序。

P.S:我刷新页面后,它会自动重定向。所以我确定逻辑上有一些错误。

如有任何帮助,我们将不胜感激

<?php
#File : ../controllers/Login.php

class Login extends CI_Controller{

    #Global Variables and Models to be loaded are initiated here
    public function __construct(){
        parent::__construct();
        /*
        |
        |   Load the Following Models
        |   1.Membership
        |
        */
        $this->load->model('Membership');
        #Check for Login details in the cookie
        #If checkLogin() returns true, it indicates that the user has logged in already
        if($this->Membership->checkLogin())
        {
            #redirect to ../controllers/Application Controller
            Redirect('Application');
        }
    }
    #Loads the Basic Header | Footer | Sidebar  && a Specific view->Signin
    public function index(){
        $this->load->view('include/Header');
        $this->load->view('include/SideBar');
        $this->load->view('Signin');
        $this->load->view('include/Footer');
    }
    /*
    |
    |
    |
    */
    public function  postSignin(){
        #Setting custom delimiters
        $this->form_validation->set_error_delimiters('<div class="form-group col-sm-8 center-block form-error bg-danger text-danger text-center">', '</div>');
        /*
        |
        |   ** Rules **
        |   Email       ->  required, Valid email
        |   Password    ->  required, minimum length=5, maximum length=12
        */      
        $this->form_validation->set_rules('emailid','Email','required|valid_email');
        $this->form_validation->set_rules('password','password','required|min_length[5]|max_length[12]|');
        #if the validation failes
        if ($this->form_validation->run() == FALSE)
        {
            #load the Header | Footer | Sidebar | Signin views again
            $this->load->view('include/Header');
            $this->load->view('include/SideBar');
            $this->load->view('Signin');
            $this->load->view('include/Footer');
        }
        else
        {
            #If checkCredentials() method returns true, it indicates a valid login
            if($this->Membership->checkCredentials())
            {   
                $emailid=$this->input->post('emailid');

                #Create an array to store all the necessary details
                $session_data=array(
                        'user_id'=>$this->Membership->getUserId($emailid),
                        'email'=>$emailid,
                        'first_name'=>$this->Membership->getFirstName($emailid),
                        'last_name'=>$this->Membership->getLastName($emailid),
                    );
                #Set the session data using array formed above
                $this->session->set_userdata($session_data);
                #Redirect to the next controller '../controllers/Application'
                Redirect('Application');        
            }
            #If checkCredentials() returns false, load views and display appropriate message
            else
            {
                #set login-status to 0
                $data['login_status']=0;
                #load the Header | Footer | Sidebar | Signin views again
                $this->load->view('include/Header');
                $this->load->view('include/SideBar');
                $this->load->view('Signin',$data);
                $this->load->view('include/Footer');
            }
        }       
    }
}
?>

您可以制作核心控制器来处理那部分代码,检查登录状态。比您可以使用任何需要登录检查的关闭应用程序控制器扩展该控制器。

<?php if ( ! defined('BASEPATH')) exit('No direct access allowed');
//this is in APPPATH . 'core/'
class MY_Logincheck extends CI_Controller
{
  public function __construct()
  {
    parent::__construct();
  }

  public function index()
  {
    /*
    |
    |   Load the Following Models
    |   1.Membership
    |
    */
    $this->load->model('Membership');
    #Check for Login details in the cookie
    #If checkLogin() returns true, it indicates that the user has logged in already
    if( ! $this->Membership->checkLogin()) {
        #redirect to ../controllers/Application Controller
        redirect('login', 'refresh');
        exit();// check switched to be firstly seen if not login passed
    }
  }
}

<?php if ( ! defined('BASEPATH')) exit('No direct access allowed');

class Application extends MY_Logincheck
{
  public function __construct()
  {
    parent::__construct();
  }

  public function index()
  {
    // some code related to application
  }
}

您需要考虑的事情很少。 1.) 我不确定在没有适当的 .htaccess 文件代码的情况下,您是否能很好地路由到应用程序控制器。 2.) 检查一些库,例如 Ben Edmund 的 Ion_Auth for CI,它可以使事情变得更容易。 3.) 仔细检查是否加载了所有需要的助手和库。 4.) 没有模型代码我不能告诉更多。

Cache 是这里的罪魁祸首!我用这些把它关掉了。现在回不去了。谢谢大家的帮助。

$this->output->set_header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate");
$this->output->set_header("Cache-Control: post-check=0, pre-check=0", false);
$this->output->set_header("Pragma: no-cache");