Я видел, что у codeigniter есть возможность сохранять значения сеанса в базе данных.
Он говорит, что сохранение сессии в базе данных является хорошей практикой безопасности.
Но я думаю, что сохранение информации сеанса в базе данных помогает повысить производительность.
Они сохраняют только несколько элементов сеанса, например:
CREATE TABLE IF NOT EXISTS 'ci_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) );
Но если сайт использует больше переменных сеанса, таких как имя пользователя, последнее время входа и т. Д., Я могу сохранить их в базе данных и использовать их в программе.
Нужно ли добавлять эти столбцы в одну и ту же таблицу? Я думаю, что сохранение информации о сеансе в базе данных помогает только сократить использование памяти веб-серверов (ОЗУ). Может ли кто-нибудь объяснить, в каком смысле это повышает безопасность.
Это никак не улучшает безопасность.
Наиболее распространенный и разумный шаблон для хранения сеансов в базе данных – это когда у вас есть несколько интерфейсных серверов, поэтому для них требуется общее хранилище сеансов.
Для downvoters: файл в файловой системе не менее защищен, чем запись в базе данных.
Идея состоит в том, что сеансы не могут быть захвачены.
Идентификатор сеанса хранится в файле cookie. Если хакер может украсть этот идентификатор, он может притворяться кем-то другим, потому что сеанс идентифицируется … это идентификатор.
Сохраняя идентификатор сеанса пользователя, IP-адрес и сервер-сервер (например, ваша база данных), вы можете сравнить данные, сохраненные в базе данных с клиентом. Если хакер похищает чей-то идентификатор сеанса, у хакера может быть не только соответствующий IP-адрес и / или пользовательский агент, что делает пользователей не соответствующими, что позволяет показывать или скрывать определенный контент.
Однако вы должны сравнивать данные вручную.
Общим средством безопасности faux-pas с сеансами на основе файлов является их сохранение в /tmp
или в другом общем каталоге, где данные могут быть доступны третьим сторонам; особенно на общих хостах, это может быть проблемой. Это может быть предотвращено с надлежащими правами доступа к файлам.
Сохранение их в базе данных означает, что у вас есть все ограничения доступа к базе данных на месте, хотя это также означает, что вам необходимо правильно их настроить и безопасно настроить физическое хранилище базы данных.
Это повышает производительность, поскольку сервер базы данных имеет больше уровней для повышения производительности благодаря кешированию и хранению в памяти, тогда как сеансы на основе файлов всегда несут доступ к диску. Параллельный доступ может быть улучшен, так как вы можете выбрать другие механизмы параллелизма, кроме блокировки файлов. Если ваш сервер базы данных уже занят обычной работой с базой данных, хотя добавление обработки сеанса на нем может быть или не быть хорошей идеей.
Это ответ: могу ли я сохранить их в базе данных и использовать их в программе?
Да, вы можете сохранить их в базе данных, но для этого нет необходимости создавать отдельный столбец. Он входит в столбец userdata.
Вы можете установить имя пользователя с помощью $this->session->set_userdata('sessionname',session value);
Вы можете получить его с помощью $var=$this->session->userdata('sessionname');
Приложение должно иметь возможность запускать на нескольких серверах без привязки к серверу (методы, которые направляют запросы от одного и того же клиента к одному и тому же серверу). Легкий способ убедиться, что сеансы продолжают работать должным образом, – это хранить сеансы в центральной базе данных, которая является общей для всех серверов.
Приложение должно иметь возможность запускать на общем хосте, где существуют существенные проблемы безопасности, связанные с хранением данных сеанса в файловой системе.
Требования к производительности приложения очень требовательны и требуют более сложного решения для хранения данных сеанса. Существует много существующих идей и методологий, которые затрагивают проблемы производительности базы данных, и их можно использовать, когда сеансы хранятся в базе данных.
Вы не упоминаете, используете ли вы PHP или MYSQL, но сохранение вашей сессии в базе данных не дает вам лучшей производительности, на самом деле все наоборот.
Сеанс по умолчанию, основанный на файлах в PHP, намного быстрее, чем извлечение значений сеанса из базы данных, однако вы не заметите разницы, пока не будете обрабатывать тысячи запросов в секунду.