Проверка сессий Codeigniter из файла представления заголовка - PullRequest
1 голос
/ 17 мая 2011

Я новичок и только начал использовать Codeigniter, и столкнулся с некоторой путаницей в отношении сессий.

То, чего я хочу достичь, как и в обычном php, я хочу проверить, вошел ли пользователь в систему, используя файл заголовка, который проверяет данные сеанса. Я не хочу проверять / записывать этот код проверки в каждом контроллере при передаче данных в файл представления.

Может кто-нибудь показать мне, как это можно сделать?

Ex. Я не хочу делать следующее на каждом контроллере:

//Controller:
if($this->session->userdata('loggedin'){
$data['loggedin'] = $this->session->userdata('loggedin');
}
//I dont want to check the above on every function in every controller
$this->load->view('some_view_file', $data);

//some_view_file
if(isset($loggedin)){
echo "You are logged in!";
}
else
{
echo "Please log in!";
}

Вместо этого я хочу что-то вроде следующего:

//some view file
if(isset($loggedin))
{
echo "your logged in";
}
else
{
echo "please log in";
}

А также, как я могу использовать нативные сессии php вместо сессий CI. Любая помощь будет высоко ценится. Спасибо.

Ответы [ 2 ]

7 голосов
/ 17 мая 2011

Во-первых, нет причины, по которой вы не можете просто написать что-то подобное на ваш взгляд:

<? echo ($this->session->userdata('loggedin')) ? "Logged In": "Not Logged In"; ?>

Тогда вашим контроллерам не нужен ни один из этих кодов.

Однако еслипроверка является более сложной или чем-то еще, тогда есть несколько мест, где вы можете сделать это.

1) В конструкторе пользовательского контроллера: создайте новый файл application/core/MY_Controller.php и переопределите конструктор чем-то вроде:

class MY_Controller extends CI_Controller 
{
    public function __construct() 
    {
        parent::__construct();
        if($this->session->userdata("loggedin")) {
            // do something
        }
    }
}

, затем заставьте все ваши контроллеры расширять MY_Controller.

2) Или в post_controller_constructor хуке.http://codeigniter.com/user_guide/general/hooks.html (это более прозрачно и, возможно, проще, если у вас уже есть тонны контроллеров)

Вы можете использовать собственные сеансы с этим: http://codeigniter.com/wiki/Native_session/

0 голосов
/ 17 мая 2011

Я думаю, что использование конструкции на вашем контроллере было бы самым разумным подходом.

Я также рекомендую зашифровать сессионный cookie.


class Blog extends CI_Controller {

       public function __construct()
       {
            parent::__construct();
            //always check if session userdata value "logged_in" is not true
            if(!$this->session->userdata("logged_in"))
            {
                 redirect('login');
            }

       }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...