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