Сеансы CodeIgniter против сессий PHP - PullRequest
44 голосов
/ 05 января 2010

Я относительно новичок в CodeIgniter и делаю свой первый проект CI, в котором есть учетные записи пользователей и т. Д. В прошлом я всегда использовал переменную PHP __ESSESS для этой цели. Тем не менее, CI, похоже, имеет свой собственный механизм сеанса, который он утверждает, что «лучше»

Механизм сеанса CI, кажется, хранит все данные в куки? Лично мне нравится идея о том, что все данные хранятся на сервере, доступ к которому осуществляется с помощью ключа cookie, например механизма сессий PHP ... Я глупо думаю, что это лучше? Должен ли я просто принять механизм КИ? Или я должен пойти дальше и использовать нативные сессии PHP?

Что вы, ребята, делаете?

Спасибо
Мало

Ответы [ 5 ]

34 голосов
/ 05 января 2010

По своему опыту работы с КИ я столкнулся с некоторыми аномалиями в его сеансах, но для большинства повседневных нужд библиотека хорошая и с ней легко работать. Как было отмечено, 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)
);
8 голосов
/ 05 января 2010

В руководстве написано больше гибкости , чем лучше ; -)

Я предполагаю, что основное преимущество класса сеанса CodeIgnite заключается в том, что он интегрируется с платформой и предлагает несколько дополнительных функций, таких как отслеживание IP-адресов и то, что он называет flashdata (данные сеанса, которые стираются сразу как это читается). Если вы используете фреймворк в первую очередь, это означает, что эти варианты могут быть привлекательными для вас.

Как бы то ни было, вы также можете сохранить данные сеанса в базе данных:

http://codeigniter.com/user_guide/libraries/sessions.html

4 голосов
/ 05 января 2010

Сохраняйте сеанс PHP для получения важной информации и используйте сеанс CI для менее важной информации.

Читайте здесь. http://codeigniter.com/forums/viewthread/130577/

1 голос
/ 15 февраля 2014

Сеансы CI имеют ограничения по размеру хранилища

Как вам известно, сеансы CI - это, в основном, файлы cookie, независимо от того, шифруете вы это или нет. Что касается безопасности, то у обоих есть свои плюсы и минусы.

Меня беспокоит ограничение размера сессий CI. Он может содержать только 4 КБ данных в качестве файла cookie, в то время как собственный сеанс PHP сохраняет только ссылочный идентификатор в файле cookie, а все данные сеанса хранятся в памяти сервера. Это удобно, когда в сеансе нужно хранить большее количество элементов.

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

Надеюсь, эта информация когда-нибудь кому-нибудь поможет.

Приветствие .. !!

1 голос
/ 07 мая 2013

Я знаю, что это старый пост, но я чувствую, что стоит поделиться тем, что я нашел.

Поскольку CI использует подход на основе файлов cookie (даже с хранилищем базы данных), это вызывает проблему для моего конкретного приложения, которое передает данные удаленным клиентам, запрашивающим данные через curl. Суть в том, что Cookies и межсайтовый скриптинг, хотя и управляемы, не очень хорошо играют вместе.

Я решил переопределить собственный класс Session.php, предоставляемый CI, своим собственным MY_Session.php. Я был рад обнаружить, что это не так уж сложно, но с удивлением обнаружил, что CI восстанавливает идентификатор сеанса, даже если мой сценарий явно предоставил их.

В соответствии с инструкцией CI

Уникальный идентификатор сеанса пользователя (это статистически случайная строка с очень сильной энтропией, хэшируется с MD5 для переносимости, и регенерируется (по умолчанию) каждые пять минут )

Хотя я, вероятно, могу найти способ переопределить это, мне интересно, не будет ли намного проще вернуться обратно к сеансам PHP.

Просто пища для размышлений, если вы собираетесь использовать КИ.

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