2015-06-26 4 views
2

Я недавно обновил форму 2.2.x до 3.0.0 со следующей процедурой обновления от codeigniter website. У меня возникли проблемы с новой библиотекой сеансов - это проблема.Codeigniter 3 - Session not working

У нас есть раздел входа, который зависит от подобласти и пользователя/передать полномочия даст вам определенные привилегии от ADMIN/Посредник/КЛИЕНТА/USER

Для того, чтобы определить правильные привилегии для пользователя мы построили клиентская БИБЛИОТЕКА (местоположение: приложение/библиотека), которую мы назвали Session_management, эта библиотека НЕ ​​расширяет основной драйвер/библиотеку SESSION и никогда не имеет и не имеет расширения для другого класса, эта библиотека также автоматически загружается до CI 3.0. 0 все работает нормально.

Сначала этот Session_management делает __construct()

$this->CI =& get_instance(); 
$this->CI->load->model('users'); 
$this->CI->load->model('clients'); 
$this->CI->load->model('sessions'); 
$this->CI->load->driver('session'); 
$this->CI->load->library('password_hash'); 
$this->CI->load->helper('url'); 

$this->users = $this->CI->users; 
$this->clients = $this->CI->clients; 
$this->sessions = $this->CI->sessions; 
$this->session = $this->CI->session; 
$this->password_hash = $this->CI->password_hash; 

До CI 3.0.0 я не имею никаких проблем в использовании

$this->CI->load->library('session'); 

, но по неизвестной причине (для меня) я НЕОБХОДИМО загрузить его через водителя

$this->CI->load->diver('session'); 

Если кто-то может объяснить, почему мне это нужно делать так t было бы здорово.

Когда пользователь отправляет свои учетные данные пользователя/пароля, запрашивается сеанс/подпись CONTROLLER, который запускает первую проверку формы, обеспечивая все успешно, вызывается метод входа в систему Session_management.

$success = $this->session_management->login 
    ($this->input->post('email'), $this->input->post('password')); 

В методе ВХОДА в классе Session_management связка сессий устанавливаются с помощью

$this->session->set_userdata(); 

$this->session->set_userdata('user_id', 0); 
$this->session->set_userdata('user_name', ''); 
$this->session->set_userdata('client_id', 0); 
$this->session->set_userdata('client_administrator', 0); 
$this->session->set_userdata('reseller_administrator', 0); 

Однако, когда я var_dump() сессию для всех своих данных сеанса он не имеет никакого отношения, и я не могу почему это так, никаких данных сеанса нет, кроме того, что мои защищенные поля образуют конфигурацию, которую я проверил дважды и трижды проверял и работает нормально, мой sess_save_path правильно хранит файлы сеанса, а остальные конфиги sess также правильны.

$config['sess_driver'] = 'files'; 
$config['sess_cookie_name'] = 'ci_session'; 
$config['sess_expiration'] = 7200; 
$config['sess_save_path'] = '/Users/******/Sites/********/tmp'; 
$config['sess_match_ip'] = FALSE; 
$config['sess_time_to_update'] = 300; 
$config['sess_regenerate_destroy'] = FALSE; 

Это сайт разработки на моем локальном OS X ИМАК, как я говорю до CI 3.0.0 все работает нормально.

Просто добавить, прежде чем я получаю ответ изречение «Вы должны использовать»

$this->load->library('session'); 

Я «HAD», чтобы загрузить его в качестве водителя, у меня нет выбора, я прочитал документацию и видели, как инициализировать сеанс library.

Если я попытаться загрузить его в качестве библиотеки

$this->load->library('session'); 

Это то, что я получаю

A PHP Error was encountered 

Severity: Notice 
Message: Undefined property: Session::$session 
Filename: libraries/Session_management.php 
Line Number: 38 

Для вашего исх: строка 38:

$this->session = $this->CI->session; 

Это после попытки загрузить библиотеку сеансов

$this->CI->load->library('session'); 

Также для добавления в это сообщение re: сеансы базы данных/сеанс файла. Ярлыки базы данных были моим первым вариантом, обновили столбцы и индексы базы данных в соответствии с CI 3.0.0, поскольку упоминания и сеансы документации были и хранятся в таблице базы данных, когда я изменяю свой конфиг для использования базы данных, однако, читая производительность различия между сеансами файлов с сеансами базы данных под высокой нагрузкой, сеансы файлов не будут выполнять сеанс работы с базой данных, и поскольку создаваемый веб-сайт/платформа будет находиться под большой нагрузкой, сеансы базы данных не будут продвигаться вперед.

Как примечание: Сайт работает под subdomain.domain *** структура, где поддомен зарегистрирован в качестве названия компании на регистрацию фирмы т.е.

mycompany.mywebsiteurl.com 
anothercompany.mywebsiteurl.com 

Как ранее уже - до моего обновления до. CI 3.0.0 работал отлично.

Могу ли я также добавить: я проверил файлы своего журнала, я запускаю хвост -f для обновлений живого журнала - и он не видит никаких проблем с журналом.

Любая помощь, информация или что-нибудь, что могло бы поставить меня в правильном направлении, было бы оценено.

У меня также posted on the CI forum.

ответ

2

Новая копия CI 3.0.0 с необходимыми файлами и конфигурациями, перенесенными через, не решила мою проблему/проблему.

По всей видимости, проблема в том, что у меня был вызов контроллера Sesssion.php, который называется тем же, что и файл драйвера.

Когда CI (Codeigniter) вызывает

$this->load->library('session') 

есть несколько проверок, прежде чем сделали CI знает, что вы хотите на самом деле загрузить CI_Session класс ... class_exists («Session») возвращает TRUE, и он останавливается там чтобы избежать фатальной ошибки.

Надеюсь, это тоже поможет другим.

+0

Итак, как вы решаете свою проблему? можете ли вы отредактировать свой ответ на его основе? –