Понимание сеансов codeigniter - PullRequest
2 голосов
/ 09 ноября 2011

Я пытаюсь создать базовый скрипт входа в систему с codeigniter, но есть кое-что, чего я не понимаю ...

Как вы инициализируете сеанс после и только после того, как вы вошли в систему?

Нужно ли указывать $this->load->library('sessions') в каждом конструкторе в области членов?

я потерян: P

Ответы [ 5 ]

7 голосов
/ 10 ноября 2011

Поместите класс сеанса в конфигурацию автозагрузчика, в application/config/autoload.php:

$autoload['libraries'] = array('session' /* , ... */);

Тогда это доступно автоматически в каждом контроллере:

$session_id = $this->session->userdata('session_id');

и вы можете инициализировать данные сеанса после (и только после!) Каждого входа в систему.

И это называется session, а не sessions. поэтому, если вы не хотите выполнять автозагрузку (не имеет смысла , а не автозагрузка библиотеки сеансов, но в любом случае, делайте что хотите), используйте правильное имя библиотеки, чтобы она работала;)

2 голосов
/ 13 ноября 2011

Будьте осторожны при автозагрузке сеансов Codeigniter, особенно если вы используете MySQL в качестве хранилища сеансов для сайта с высокой нагрузкой. Помимо очевидного замедления (в конечном итоге) операций чтения / записи, Codeigniter всегда будет проводить сеансы даже для ботов, в частности для Google-ботов. В зависимости от настроек вашего собственного сайта в Инструментах Google для веб-мастеров это может привести к снижению производительности.

Я считаю, что наиболее эффективным способом хранения сеансов является Memcache. Я пробовал MongoDB, но иногда это может принести больше вреда, чем пользы. Я открываю источник моего собственного управления сессиями, используя Memcache для Codeigniter, расположенного здесь .

Memcache имеет свой собственный внутренний сборщик мусора, более мощный, чем Codeigniter, так что вам не придется беспокоиться о размере вашего хранилища. Вы можете просто увеличить объем памяти Memcache, если вам нужно. Я бы предложил ~ 4 ГБ для сайта с высокой нагрузкой и более 100 одновременных запросов в секунду.

Удачи!

2 голосов
/ 10 ноября 2011

Лучший способ сделать это - создать свой собственный класс Controller, расширяющий CI_Controller.

В основном, когда вы говорите:

class Controller_name extends CI_Controller {}

Вы бы изменили это на

class Controller_name extends My_Controller {}

My_Controller будет выполнять аутентификацию, и если страница не требует входа пользователя, вы используете стандартный класс CI_Controller.

ОБНОВЛЕНИЕ:

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

Создайте MY_Controller.php в /applications/core/ и используйте следующий код.

<?php

class  MY_Controller  extends  CI_Controller  {

    function __construct() {
        parent::__construct();

        // Verify logged in status.
        if ( ! $this->session->userdata('loggedIn') ) redirect('/login');
    }
}

Затем в вашем login контроллереВы должны установить переменную сеанса с именем loggedIn.Обычно я устанавливаю значение этого идентификатора пользователя, чтобы быстро ссылаться на него.

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

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Dashboard extends MY_Controller {

    /* Your Code */

}

Если у пользователя нет loggedIn в качестве переменной сеанса, он будет перенаправлен на контроллер login.

Надеюсь, это поможет.

0 голосов
/ 10 ноября 2011

Я фанат использования библиотеки для обработки всего взаимодействия с данными сеанса. Добавьте библиотеку в конфигурацию автозагрузки, и вы можете ссылаться на нее по мере необходимости из любого места вашего кода.

Я предлагаю взглянуть на существующую библиотеку аутентификации (например, Ion_Auth - моя любимая отправная точка) и либо строить оттуда, либо решать, какие извлеченные уроки можно применить к вашим собственным потребностям.

0 голосов
/ 10 ноября 2011

Вы можете создать новый класс контроллера, который расширил бы "CI_controller".Вам нужно назвать его, используя префикс «MY_», и поместить его в папку «/ system / application / library /».В конструкции вашего собственного контроллера вы начинаете сеанс.Если вашему контроллеру требуется авторизация, вы расширяете пользовательский класс, иначе вы расширяете класс "CI_controller".

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