用户会话的Codeigniter重定向循环已登录

时间:2014-11-17 18:24:14

标签: php .htaccess codeigniter

我的控制器

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'] ='自动';

2 个答案:

答案 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");` 

但请确保您已加载网址助手