Подтвердить что ты не робот

Почему это хорошо сохранить для сохранения сеансов в базе данных?

Я видел, что у 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)
);

Но если сайт использует больше переменных сеанса, таких как имя пользователя, последнее время входа и т.д., я могу сохранить их в базе данных и использовать их в программе.

Нужно ли добавлять эти столбцы в одну и ту же таблицу? Я думаю, что сохранение информации о сеансе в базе данных помогает только сократить использование памяти веб-серверов (ОЗУ). Может ли кто-нибудь объяснить, в каком смысле это повышает безопасность.

4b9b3361

Ответ 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, намного быстрее, чем извлечение значений сеанса из базы данных, однако вы не заметите разницу, пока не будете обрабатывать тысячи запросов в секунду.