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