Данные сеанса Codeigniter недоступны на других страницах после входа в систему - PullRequest
9 голосов
/ 15 марта 2010

Итак, я настроил страницу входа в систему, которая проверяет учетные данные пользователя, а затем устанавливает данные сеанса 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, файлами cookie и сессиями, но это мой первый проект с Codeigniter, и я озадачен.

Может ли это быть связано с проблемами с каталогом? У меня есть страница входа в систему и процесс, управляемый контроллером входа в систему, а затем он перенаправляет на контроллер сайта.

Спасибо за вашу помощь, и, пожалуйста, дайте мне знать, если мне нужно что-то прояснить.

Ответы [ 7 ]

6 голосов
/ 15 марта 2010

Ваш код выглядит нормально. У меня были многочисленные проблемы с библиотекой сессий Codeigniter, включая что-то похожее на то, что вы упомянули.

Попробуйте решить проблему с библиотекой Native Session .

5 голосов
/ 24 марта 2011

Точно так же, у всех, кто пытается использовать сеансы CI, есть что попробовать:

Я искал решение той же проблемы, и после многих тупиков я повторно исследовал свой config.php.

Там я заметил, что $config['cookie_domain'] не был установлен правильно. После установки этого (и установки моего cookie_prefix на '') сеансы теперь работают правильно.

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

(Настройка сеансов базы данных очень помогла в выяснении этого.)

2 голосов
/ 15 февраля 2012

Если кто-нибудь сталкивается с этой проблемой, перейдите в config / config.php и убедитесь, что для $config['sess_use_database'] установлено значение TRUE. Это сохранит все данные сеанса в вашей базе данных - что сработало для меня.

Если у вас нет таблицы с именем 'session', выполните эту команду 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;
0 голосов
/ 28 марта 2018

Codeigniter 3.0 в Ubuntu отображает только Array ([__ci_last_regenerate] => 1522220387) .. остальные сеансы не отображаются введите описание изображения здесь

0 голосов
/ 23 июля 2014

Почему вы не используете ion auth для безопасности и для данных сеанса ... Я всегда использую это, когда хочу создать программу с логином Также вам нужно создать таблицу в вашей БД с именем сеанса. И перейдите к файлам конфигурации и базы данных в папке Config и укажите true для сеанса, где он хочет для базы данных. Вы плохо прочитали документацию

0 голосов
/ 08 июля 2013

Не забудьте проверить имя вашего куки. В нем не может быть точек.

Плохое печенье: .domain.com

Хороший файл cookie: domaincom

0 голосов
/ 30 июля 2010

Я также новичок в коде воспламенителя.Juz, чтобы дать идею.Вы положили session_start () в свой контроллер?вот пример:

класс Cuser расширяет контроллер {

function Cuser()
{
    parent::Controller();
    session_start();
    $this->load->helper('url');     
}

}

возможно я не прав ... но вы можете попробовать это ...*

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