Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 会话检查工作不正常-CodeIgniter_Php_Codeigniter_Session - Fatal编程技术网

Php 会话检查工作不正常-CodeIgniter

Php 会话检查工作不正常-CodeIgniter,php,codeigniter,session,Php,Codeigniter,Session,我已将登录控制器设置为默认控制器 在我的模型成员身份中,我有一个函数checkLogin(),如果会话有有效数据,它将返回true 方法checkLogin()工作正常 我在构造函数中调用checkLogin()方法,如下所示 checkLogin()方法工作正常,但不确定为什么在加载Login/postSignin时,该方法不会重定向到应用程序 注:一旦我刷新页面,它会自动重定向。因此,我确信逻辑中存在一些错误 任何帮助都将不胜感激 <?php #File : ../controller

我已将
登录
控制器设置为默认控制器

在我的模型
成员身份
中,我有一个函数checkLogin(),如果会话有有效数据,它将返回
true

方法
checkLogin()
工作正常

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

checkLogin()方法工作正常,但不确定为什么在加载
Login/postSignin
时,该方法不会重定向到应用程序

注:一旦我刷新页面,它会自动重定向。因此,我确信逻辑中存在一些错误

任何帮助都将不胜感激

<?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
    }
  }
}

缓存
是这里的罪魁祸首!我用这些把它关掉了。现在它不回去了。谢谢你们的帮助

$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");

为什么在成功登录后不能加载视图?比如$this->load->view('view_name_here');因为我需要另一个控制器来接管主应用程序。如果可能的话,你知道从一个控制器传递到下一个控制器的具体方式吗?重定向实际上应该可以工作。不太确定,但是你能把重定向改为重定向并使R变小吗?不!没用!我的意思是,当我从
Login/postSignin
导航到
Application
后按
back
按钮时,它实际上返回到
Login/postSignin
。但当我按下refresh时,它会成功返回到
应用程序
应用程序是否存在CI_uu或其他一些基本控制器?另外,好的popint将创建本身具有check部分的核心控制器,而不是使用:
类应用程序扩展我的_Login_check{}
谢谢:)我肯定会签出:),但我希望应用程序也扩展CI_控制器?是否可以从两个类扩展
应用程序
类某些类扩展CI\U控制器{}类应用程序扩展某些类{}
您已经从CI\U控制器获得了所有继承。请查看PHP文档以了解。
$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");