Сеансы CodeIgniter против сеансов PHP
Я относительно новичок в CodeIgniter и делаю свой первый проект CI, в котором есть учетные записи пользователей и т.д. В прошлом я всегда использовал переменную PHP $_SESSION для этой цели. Однако у CI, похоже, есть собственный механизм сеанса, который, по его утверждению, "лучше"
Механизм сеанса CI, похоже, сохраняет все данные в файле cookie? Лично мне нравится идея всех данных, хранящихся на сервере, доступ к которым осуществляется с помощью файла cookie-ключа, такого как собственный механизм сеансов PHP. Я считаю, что это глупо думать, что лучше? Должен ли я просто принять механизм CI? Или я должен идти вперед и использовать собственные PHP-сессии?
Что вы, ребята, делаете?
Спасибо,
Мала
Ответы
Ответ 1
В моем опыте с 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)
);
Ответ 2
В руководстве указано больше гибкости, а не лучше; -)
Я предполагаю, что основным преимуществом класса Session CodeIgnite является то, что он интегрируется с каркасом и предлагает несколько дополнительных функций, таких как отслеживание IP-адресов и то, что он вызывает flashdata (данные сеанса, которые были удалены, как только они будут прочитаны). Если вы используете фреймворк в первую очередь, это означает, что эти параметры могут быть привлекательными для вас.
Независимо от того, вы также можете сохранить данные сеанса в базе данных:
http://codeigniter.com/user_guide/libraries/sessions.html
Ответ 3
Сохраните сеанс PHP для получения важной информации и используйте сеанс CI для менее важной информации.
Прочтите здесь wyh. http://codeigniter.com/forums/viewthread/130577/
Ответ 4
Я знаю, что это более старая статья, но я считаю, что стоит поделиться тем, что я нашел.
Поскольку CI использует подход на основе файлов cookie (даже с хранилищем базы данных), он вызывает проблему для моего конкретного приложения, которое обслуживает данные для удаленных клиентов, запрашивающих данные через завиток. Суть в том, что Cookies и Cross Site Scripting, хотя и управляемы, не играют хорошо вместе.
Я решил попробовать переопределить собственный класс Session.php, предоставленный CI, с моим собственным MY_Session.php. Я был рад найти, что это было не слишком сложно, но с удивлением обнаружил, что CI обновляет идентификатор сеанса, хотя мой script явно предоставил их.
В соответствии с руководством CI
Уникальный идентификатор сеанса пользователя (это статистически случайная строка с очень сильной энтропией, хешируется MD5 для переносимости и восстановлено (по умолчанию) каждые пять минут)
Хотя я, вероятно, могу найти способ переопределить это, мне интересно, не будет ли намного проще вернуться к сессиям PHP.
Просто пища для размышлений, если вы собираетесь использовать CI.
Ответ 5
CI-сессии имеют ограничения размера хранилища
Как вам известно, CI-сессии - это файлы cookie в основном, независимо от того, зашифруете вы его или нет. Что касается безопасности, то у нее есть свои плюсы и минусы.
Меня беспокоило ограничение по размеру сеансов CI. Он может содержать только данные размером 4 kb, поскольку в основном это cookie, в то время как Native PHP-сеанс хранит только ссылочный идентификатор в cookie, и все данные сеанса хранятся в памяти сервера. Это удобно, когда вам нужно хранить большее количество элементов в сеансе.
Скажите корзине покупок с большим количеством предметов или плейлистом музыки пользователя с более чем 50 дорожками... и т.д.
Я надеюсь, что эта информация кому-то поможет.
Приветствия..!!