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

时间:2015-02-27 12:59:37

标签: php codeigniter session

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

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

方法checkLogin()工作正常。

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

方法checkLogin()工作正常,但我不确定为什么在加载Login/postSignin时方法没有被重定向到Application。

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');
            }
        }       
    }
}
?>

2 个答案:

答案 0 :(得分:0)

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

<?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.)我不确定你是否会在没有propper .htaccess文件代码的情况下很好地路由到应用程序控制器。 2.)检查一些像Ben Edmund的Ion_Auth这样的CI库,它可以使事情变得更容易。 3.)仔细检查是否加载了所有需要的帮助程序和库。 4.)如果没有型号代码我就不能说清楚了。

答案 1 :(得分:0)

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");
相关问题