Проблема Codeigniter Redirect () - PullRequest
       8

Проблема Codeigniter Redirect ()

2 голосов
/ 13 августа 2011

Я создал класс MY_Controller для проверки сессий.

Мой LoginController проверяет информацию о пользователе, и если все в порядке, я перенаправляю пользователя в PainelController. Я использую перенаправление, поэтому мой URL будет обновляться с помощью / localhost / painel вместо / localhost / session / login

Проблема в том, что когда я использую перенаправление, я не могу получить доступ к своему сеансу, только используя load-> view.

Есть ли обходной путь?

Заранее спасибо за любую помощь.

PS: я использую .htaccess, найденный на CI Wiki

EDIT

class MY_Controller extends CI_Controller {

    public function __construct() {
        parent::__construct();
        if(!$this->session->userdata('usuario')) {
            redirect('login');
        }
    }

}

Часть логина: расширяет CI_Controller

if( $rs )
            {

                $this->session->set_userdata('usuario', $usuario);//usuario is a object
                //$this->load->view('painel');//it works
                redirect('painel', 'location');//it doesn't
            }
            else
            {
                $this->load->view('login', $data = array('mensagem'=>'Usuário ou senha inválidos.'));
            }

-

My Painel View

echo $this->session->userdata('usuario')->usuario_nome; //it works
only if I load->view('painel')

Даже если я попытаюсь получить доступ к этому значению сеанса на моем PainelController (расширяет MY_Controller), он не будет работать, скажет:

Message: main() [function.main]: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "Usuario" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition

1 Ответ

0 голосов
/ 15 августа 2011

Я несколько раз пытался перенаправить на свою изолированную программную среду CI, но сеанс не пропал.
Какие библиотеки / помощники вы используете в PainelController?
Кажется, у вас нет @session_start(); в этом конкретном контроллере.

Обычно вы можете использовать существующие Auth библиотеки, которые будут обрабатывать это для вас, а затем включать это в конструктор каждого controller или даже MY_Controller.
Вот пример:

class Events extends CI_Controller {
// Constructor function
public function __construct()
{
    //load initial models and libraries that are needed for the controller
    parent::__construct();
    $this->load->library('auth');
            ...
    }
    ...
}

И тогда моя библиотека auth будет иметь такой конструктор.

class Auth {
  var $CI       = NULL;

  function Auth($props = array())
  {
    $this->CI =& get_instance();

    // Load additional libraries, helpers, etc.
    $this->CI->load->library('session');
    $this->CI->load->database();
    $this->CI->load->helper('url');
    @session_start();
  }
  ...
}

EDIT:

Вы также можете включить это в свой autoload, обычно расположенный по адресу config/autoload.php.
http://codeigniter.com/user_guide/general/autoloader.html

Вот пример.

/*
| -------------------------------------------------------------------
|  Auto-load Libraries
| -------------------------------------------------------------------
| These are the classes located in the system/libraries folder
| or in your application/libraries folder.
|
| Prototype:
|
|   $autoload['libraries'] = array('database', 'session', 'xmlrpc');
*/

$autoload['libraries'] = array('database','session', 'encrypt');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...