Как система сеансов codeigniter отделена от PHP, встроенного в $_SESSION?

Как сказано в инструкции:

Примечание. Класс Session не использует собственные сеансы PHP. Он генерирует свои собственные данные сеанса, предлагая больше гибкости для разработчиков.

Но когда я сохраняю некоторые данные, используя $this->session->set_userdata(array('sample_key' => 'sample_value'));, в phpinfo() я могу найти sample_key и sample_value в этом.

Я надеялся, что часть

не использует собственные сеансы PHP

это означает, что он скрывает переменные сеанса от phpinfo().

Я всегда думал, что это может быть недостаток безопасности. Может быть?

Как кажется, значений urlencodeed.


person Mohammad Naji    schedule 29.02.2012    source источник
comment
phpinfo() страницы вообще не должны быть общедоступными в производственной системе. Я очень сомневаюсь, что кто-либо когда-либо использовал показ переменных сеанса в качестве причины для использования пользовательской системы сеансов.   -  person ThiefMaster    schedule 01.03.2012
comment
Настоящей проблемой безопасности будет наличие общедоступного phpinfo() вывода.   -  person ceejayoz    schedule 01.03.2012


Ответы (1)


«Сеанс» CodeIgniter просто сохраняет данные в файле cookie и называет его сеансом. Собственные сеансы PHP хранят данные на сервере, а «идентификатор сеанса» — в файле cookie.

В phpinfo вы можете видеть переменные, но это ваш сеанс, вы не можете видеть сеанс другого пользователя.

person Rocket Hazmat    schedule 29.02.2012
comment
Очень много ложного. Существует ряд доступных драйверов сеанса, в том числе тот, который сохраняет данные в базе данных. - person ceejayoz; 01.03.2012
comment
@ceejayoz: Где я сказал, что альтернативные драйверы недоступны? Я только что описал поведение по умолчанию. - person Rocket Hazmat; 01.03.2012
comment
Файл cookie просто хранит идентификатор сеанса. Хранение фактических ДАННЫХ сеанса в файле cookie было бы ужасным риском для безопасности, например. сохранение superuser=0 в куки-файле на стороне клиента приведет к всевозможным забавным вещам. - person Marc B; 01.03.2012
comment
@Marc B, вот как это делает codeigniter. codeigniter.com/user_guide/libraries/sessions.html Класс Session хранит информацию о сеансе для каждый пользователь в виде сериализованных (и, возможно, зашифрованных) данных в файле cookie. Он также может хранить данные сеанса в таблице базы данных для дополнительной безопасности, поскольку это позволяет сопоставлять идентификатор сеанса в файле cookie пользователя с сохраненным идентификатором сеанса. По умолчанию сохраняется только файл cookie. - person jasonbar; 01.03.2012
comment
Спасибо @Ракета. Поэтому мы всегда должны использовать тип сеанса на основе базы данных, потому что клиент может легко (?) изменить user_id на user_id root, что очень ужасно! - person Mohammad Naji; 01.03.2012
comment
@smhnaji: CodeIgniter не является небезопасным. Клиент может редактировать данные сеанса, но он проверяет их при каждой загрузке. Если вы измените данные сеанса, хэши не будут совпадать, и CodeIgniter аннулирует ваш сеанс. Вы можете хранить информацию о сеансе в базе данных, если хотите, или вы можете использовать библиотеку, чтобы CodeIgniter мог использовать собственные сеансы PHP. - person Rocket Hazmat; 01.03.2012