我正在使用会话进行登录功能。但是,每次我尝试登录时,都会重定向到登录屏幕。下面是代码。有一个函数设置说登录无效,不发送错误所以我不确定它是登录问题。
ATIS控制器
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Atis extends CI_Controller
{
public $status;
public $roles;
function __construct()
{
parent::__construct();
$this->load->model('User_model', 'user_model', TRUE);
$this->status = $this->config->item('status');
$this->roles = $this->config->item('roles');
$this->is_logged_in();
}
function index(){
$this->load->view("atis/inc/header");
$this->load->view("atis/dashboard");
$this->load->view("atis/inc/footer");
}
function is_logged_in()
{
$is_logged_in = $this->session->userdata('is_logged_in');
if(!isset($is_logged_in) || is_logged_in !==true)
{
redirect('main/login');
}
}
主要控制器
public function login()
{
$this->form_validation->set_rules('email', 'Email', 'required|valid_email');
$this->form_validation->set_rules('password', 'Password', 'required');
if($this->form_validation->run() == FALSE) {
$this->load->view('inc/site_header');
$this->load->view("site_nav");
$this->load->view('login');
$this->load->view('inc/site_footer');
}else{
$post = $this->input->post();
$clean = $this->security->xss_clean($post);
$userInfo = $this->user_model->checkLogin($clean);
if(!$userInfo){
$this->session->set_flashdata('flash_message', 'The login was unsucessful');
redirect(site_url().'main/login');
}
foreach($userInfo as $key=>$val){
$this->session->set_userdata($key, $val);
$this->session->set_userdata('is_logged_in');
}
redirect(site_url().'atis/');
}
}
检查登录方式
public function checkLogin($post)
{
$this->load->library('password');
$this->db->select('*');
$this->db->where('email', $post['email']);
$query = $this->db->get('users');
$userInfo = $query->row();
if(!$this->password->validate_password($post['password'], $userInfo->password)){
error_log('Unsuccessful login attempt('.$post['email'].')');
return false;
}
$this->updateLoginTime($userInfo->id);
unset($userInfo->password);
return $userInfo;
}
ATIS控制器的场地功能
public function yard()
{
$this->load->model('atisyard_model');
$this->data['yards'] = $this->atisyard_model->getyardname();
$this->data['trackdatabase'] = $this->atisyard_model->gettrains();
$this->load->view("atis/inc/header");
$this->load->view('atis/yard_view', $this->data);
$this->load->view("atis/inc/footer");
}
答案 0 :(得分:0)
{1}}
中缺少$
或者如果仍然无效,请尝试更改
if(!isset($is_logged_in) || is_logged_in !==true)
到
if(!isset($is_logged_in) || is_logged_in !==true)
答案 1 :(得分:0)
$this->session->set_userdata('is_logged_in');
不正确。你应该传递像
这样的东西$this->session->set_userdata('is_logged_in', TRUE);
或
$this->session->set_userdata($arr);
让它有效。 Docs
编辑:
在控制器中,更改此
if(!$userInfo)
{
$this->session->set_flashdata('flash_message', 'The login was unsucessful');
redirect(site_url().'main/login');
}
foreach($userInfo as $key=>$val)
{
$this->session->set_userdata($key, $val);
$this->session->set_userdata('is_logged_in');
}
redirect(site_url().'atis/');
到这个
if(!$userInfo)
{
$this->session->set_flashdata('flash_message', 'The login was unsucessful');
redirect(site_url().'main/login');
}
else
{
foreach($userInfo as $key=>$val)
{
$this->session->set_userdata($key, $val);
}
$this->session->set_userdata('is_logged_in', TRUE);
redirect(site_url().'atis/');
}
编辑:20160130002859
在is_logged_in()
方法中,您正在检查if(!isset($is_logged_in) || $is_logged_in !==true)
这是否是悖论。在任何情况下,条件的右侧都是FALSE
。这是因为事实$is_logged_in
如果没有显式转换,则nevere可以按类型布尔TRUE
。这是对象。所以你应该以其他方式检查:
$is_logged_in != TRUE // this way you don't check for type
或
is_object($is_logged_in)