我的控制器
class Backspaze extends CI_Controller
{
function __construct()
{
parent::__construct();
session_start();
$this->load->library('session');
$this->load->model('getDB');
$this->IsLogged();
}
function IsLogged()
{
if (!$this->session->userdata('id'))
{
header('Location: '.base_url().'login');
}
}
function Login()
{
$this->load->view('Auth/Login');
}
}
的.htaccess
RewriteBase /backspaze
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]
我几乎尝试了所有在互联网上可用的东西,当检查用户登录时页面获得重定向循环,请给我一些解决方案
我的配置 $ config [' uri_protocol'] ='自动';
答案 0 :(得分:3)
请检查以下几点
在您的情况下,您不应该在constructor
中查看会话
水平。 ,手段,你的控制器由public&认证
页面。因此它将在此内循环/重定向
仅控制器。
将会话检查条件移至特定页面并重定向
如果假设没有经过身份验证的页面的会话,请到login
页面。下面
我已经检查了我为您创建的user_details
页面
理解。
在您的登录方法中,您应该检查already logged in or not
如果是,则应该转到dashboard
页面。我创造了一个
IsAlreadyLogged
的方法。请检查一下。
请勿在控制器中添加session_start()
照顾CI核心
使用CI核心的内置redirect
方法
如果需要所有页面,您应该在构造函数级别检查会话 在控制器中进行身份验证。
class Backspaze extends CI_Controller
{
function __construct()
{
parent::__construct();
$this->load->library('session');
$this->load->model('getDB');
}
function IsLogged()
{
if (!$this->session->userdata('id'))
{
redirect('login');
}
}
function IsAlreadyLogged()
{
if ($this->session->userdata('id'))
{
redirect('dashboard');
}
}
function user_details()
{
$this->IsLogged();
$this->load->view('user/details');
}
function Login()
{
$this->IsAlreadyLogged();
$this->load->view('Auth/Login');
}
}
答案 1 :(得分:0)
删除该行
session_start();
codeigniter处理它本身。
替换此
header('Location: '.base_url().'login');
带
redirect(base_url()."login");`
但请确保您已加载网址助手