CodeIgniter сессий - PullRequest
       1

CodeIgniter сессий

1 голос
/ 10 ноября 2011

Почему рекомендуется хранить сеансы CodeIgniter в таблице базы данных? Я знаю, что это о безопасности, но как?

почему требуется установить ключ шифрования в конфигурации при использовании класса Session? Вы должны расшифровать сеанс?

Удаляет ли $this->session->sess_destroy(); весь файл cookie или только те данные, которые вы поместили в файл cookie? И завершает ли это сеанс полностью, под которым я подразумеваю удаление $this->load->library('session')

Ответы [ 2 ]

3 голосов
/ 10 ноября 2011

Сессии CI - это, по сути, файлы cookie. Зашифровано, но куки тем не менее. Вот почему предпочтительнее хранить сеанс в базе данных, потому что вы (предположительно) имеете дело с менее недостижимой целью от атак, особенно если вы используете Active Records, которые автоматически экранируют ваши запросы (чтобы избежать инъекций SQL). Кроме того, в отличие от файлов cookie, БД не имеет такого ограниченного объема доступной памяти, поэтому вы можете хранить там любое количество данных, которое вам нужно, кэшировать операции и скрывать их от внешнего интерфейса.

Я не уверен, почему это требуется, за исключением того факта, что некоторые данные сессий автоматически шифруются CI. Таким образом, даже если вы не используете библиотеку Encryption, некоторое шифрование все равно выполняется (например, при сохранении идентификатора сеанса). Как правильно заметил Кай Цин, вам не нужно расшифровывать данные, уже обработанные CI.

$this->session->sess_destroy() просто удаляет данные, сохраненные как сеансы. Будучи также куки-файлами, чтобы удалить весь контент, вам нужно использовать специальные функции (например, обратитесь к помощнику куки-файлов). Имейте в виду, однако, что при вызове этой функции вы также удаляете флеш-сообщения (так как они являются сеансами), поэтому, если вы просто хотите удалить некоторые элементы, используйте unset_userdata($item).

Также не прекращается загрузка библиотеки. Что касается любой другой библиотеки, или класса, или контроллера, или чего-то еще, все перезагружается с нуля после каждого запроса. Каждый раз, когда вы делаете запрос, скрипты запускаются, все заново инициализируются, а когда скрипт заканчивается, все теряется, как слезы под дождем. Это обычный срок службы PHP-скрипта. Если ваш сценарий не обязательно завершится после того, как вы вызовете session-> sess_destroy (), библиотека сеанса все равно будет загружена, хотя данные будут удалены.

2 голосов
/ 10 ноября 2011

Чтобы ответить на ваш первый вопрос - рекомендуется хранить через БД, чтобы минимизировать данные, найденные в сеансе, и снизить риск глупости - как помощник.Поскольку сеансы, хранимые в БД, будут хранить идентификатор только в файле cookie, доступная информация сокращается до неиспользуемой части информации.

Вам не нужно ничего расшифровывать.Двигатель справится с этим для вас.

что касается уничтожения - я точно не знаю.Но я думаю, что простой var_dump ответил бы на это.

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