Итак, я создал страницу входа в систему, которая проверяет учетные данные пользователя, а затем устанавливает данные сеанса Codeigniter «email» и «is_logged_in» и несколько других элементов. На первой странице после входа данные доступны. После этой страницы я больше не могу получить доступ к данным сеанса. На самом деле, если я попробую перезагрузить эту первую страницу, данные сеанса исчезнут.
Я попытался хранить его в базе данных, сохраняя его незашифрованным (плохая идея, которую я знаю, но это было для устранения неполадок) и хранения ее зашифровано. Я загрузил сессионную библиотеку в config.php.
Вот пример кода, который я использую для установки данных сеанса:
$data = array( 'email' => $this->input->post('username'), 'is_logged_in' => true ); $this->session->set_userdata($data);
И чтобы получить его, я использую:
$this->session->userdata('email');
Или
$this->session->userdata('is_logged_in');
Я много работал с PHP и куки-файлами и сессиями раньше, но это мой первый проект с Codeigniter, и я недоумеваю.
Может ли это иметь какое-то отношение к проблемам с каталогом? У меня есть страница входа и процесс, контролируемый контроллером «входа», а затем перенаправляется на контроллер «сайта».
Спасибо за вашу помощь, и, пожалуйста, дайте мне знать, если мне нужно что-то разъяснить.
Ваш код выглядит отлично. У меня было много проблем с библиотекой сессий Codeigniter, включая что-то похожее на то, что вы упомянули.
Рассмотрите возможность просмотра библиотеки Native Session для решения проблемы.
Просто чтобы кто-либо еще пытался использовать сеансы CI, есть что попробовать:
Я искал решение для решения одной и той же проблемы, и после многих тупиков я повторно исследовал свой config.php
.
В этом я заметил, что $config['cookie_domain']
установлен неправильно. Установив это (и установив my cookie_prefix
в ''
), сеансы теперь работают правильно.
Поскольку файл cookie должен быть установлен в ваш домен, чтобы его можно было правильно потянуть, он просто не нашел ссылку на cookie для моей сессии и каждый раз создавал новую.
(Настройка сеансов базы данных очень помогла вам разобраться с этим.)
Если кто-нибудь столкнется с этой проблемой, перейдите в config / config.php и убедитесь, что для параметра $config['sess_use_database']
установлено значение TRUE. Это сохранит все данные сеанса в вашей базе данных – что сработало для меня.
Если у вас нет таблицы с именем «сеансы», запустите эту команду SQL:
CREATE TABLE `sessions` ( `session_id` VARCHAR( 40 ) NOT NULL DEFAULT '0', `ip_address` VARCHAR( 16 ) NOT NULL DEFAULT '0', `user_agent` VARCHAR( 120 ) DEFAULT NULL , `last_activity` INT( 10 ) UNSIGNED NOT NULL DEFAULT '0', `user_data` TEXT NOT NULL , PRIMARY KEY ( `session_id` ) , KEY `last_activity_idx` ( `last_activity` ) ) ENGINE = MYISAM DEFAULT CHARSET = utf8;
Im также новый для воспламенителя кода. Юз дать идею. У вас есть session_start () в вашем контроллере? вот пример:
класс Cuser расширяет контроллер {
function Cuser() { parent::Controller(); session_start(); $this->load->helper('url'); }
}
возможно, я ошибаюсь … но вы можете попробовать … 🙂
Ум, чтобы проверить ваше имя файла cookie. В нем нет точек.
Плохое печенье: .domain.com
Хорошее cookie: domaincom
Почему вы не используете ion auth для обеспечения безопасности и для данных сеанса … Я всегда использую это, когда хочу создать программное обеспечение с логином. Также вам нужно создать таблицу в своем db с именем session. И перейдите в файлы конфигурации и базы данных в папке Config и поставьте true для сеанса, где он хочет для базы данных. Вы не хорошо прочитали документацию