Я относительно новичок в CodeIgniter и делаю свой первый проект CI, в котором есть учетные записи пользователей и т. Д. В прошлом я всегда использовал переменную $ _SESSION PHP для этой цели. Однако у CI, похоже, есть собственный механизм сеанса, который, по его утверждению, «лучше»,
Механизм сессии CI, кажется, хранит все данные в cookie? Лично мне нравится идея всех данных, хранящихся на сервере, доступ к которым осуществляется с помощью файла cookie, такого как собственный механизм сеансов PHP. Я считаю, что это глупо, что это лучше? Должен ли я просто принять механизм CI? Или я должен идти вперед и использовать собственные PHP-сессии?
Что вы, ребята, делаете?
Благодаря,
скуловая кость
По моему опыту с CI я столкнулся с некоторыми аномалиями с его сессиями, но для большинства повседневных потребностей библиотека хороша и удобна в работе. Как было отмечено, Flashdata – очень приятная функция.
Если вы решите остаться с сессиями CI, я настоятельно рекомендую хранить сеансы в базе данных и, кроме того, шифровать файлы cookie:
$config['sess_encrypt_cookie'] = TRUE; $config['sess_use_database'] = TRUE; $config['sess_table_name'] = 'sessions';
Структура базы данных должна быть следующей:
CREATE TABLE IF NOT EXISTS `sessions` ( session_id varchar(40) DEFAULT '0' NOT NULL, ip_address varchar(16) DEFAULT '0' NOT NULL, user_agent varchar(50) NOT NULL, last_activity int(10) unsigned DEFAULT 0 NOT NULL, user_data text NOT NULL, PRIMARY KEY (session_id) );
В руководстве больше гибкости , чем лучше 😉
Я предполагаю, что основным преимуществом класса Session Code Session является то, что он интегрируется с каркасом и предлагает несколько дополнительных функций, таких как отслеживание IP-адресов и то, что он вызывает flashdata (данные сеанса, которые были стерты, как только они будут прочитаны). Если вы используете фреймворк в первую очередь, это означает, что эти параметры могут быть привлекательными для вас.
Независимо от того, вы также можете сохранить данные сеанса в базе данных:
Храните сеанс PHP для получения важной информации и используйте сеанс CI для менее важной информации.
Читайте здесь wyh. http://codeigniter.com/forums/viewthread/130577/
Я знаю, что это более старая должность, но я считаю, что стоит поделиться тем, что я нашел.
Поскольку CI использует подход на основе файлов cookie (даже с хранилищем базы данных), это вызывает проблему для моего конкретного приложения, которое обслуживает данные для удаленных клиентов, запрашивающих данные через завиток. Суть в том, что Cookies и Cross Site Scripting, хотя и управляемы, не играют хорошо вместе.
Я решил попробовать переопределить собственный класс Session.php, предоставленный CI, с моим собственным MY_Session.php. Я был рад найти, что это было не слишком сложно, но с удивлением обнаружил, что CI восстанавливает идентификатор сеанса, хотя мой сценарий явно предоставил их.
Согласно руководству CI
Уникальный идентификатор сеанса пользователя (это статистически случайная строка с очень сильной энтропией, хешированная MD5 для переносимости и регенерированная (по умолчанию) каждые пять минут )
Хотя я, вероятно, могу найти способ переопределить это, мне интересно, не будет ли намного проще вернуться к сессиям PHP.
Просто пища для размышлений, если вы собираетесь использовать CI.
CI-сессии имеют ограничения на размер хранилища
Как вам известно, CI-сессии – это файлы cookie в основном, независимо от того, шифруете ли вы его или нет. Что касается безопасности, то у нее есть свои плюсы и минусы.
Меня беспокоило ограничение размера сессий CI, оно может содержать только данные 4 kb, поскольку в основном это cookie, в то время как Native PHP-сессия хранит только ссылочный идентификатор в cookie, и все данные сеанса хранятся в памяти сервера. Это удобно, когда у вас есть большое количество предметов, которые необходимо сохранить в сеансе.
Произнесите корзину с большим количеством предметов или плейлист с музыкальным плейлистом с более чем 50 треками … и т. Д.
Надеюсь, эта информация кому-то поможет.
Ура .. !!