В каких случаях лучше использовать таблицы для пользовательских сессий, а не нативных? - PullRequest
0 голосов
/ 22 сентября 2009

Это все, что мне нужно спросить

Я сейчас имею дело с сайтом, и я не вижу по-настоящему существенной разницы в том, чтобы хранить мои сеансы в таблице базы данных и не делать этого.

Ответы [ 4 ]

4 голосов
/ 22 сентября 2009

Есть несколько причин, почему я иногда храню данные сеанса в БД. Вот самые большие два:

  1. Проблемы безопасности на общем сервере Если вы работаете на общем сервере, есть вероятность, что другим пользователям сервера будет легко проникнуть во временный каталог и получить доступ к данные сеанса вы сохранили там. Это не слишком обычно, но может случиться.
  2. Использование нескольких серверов Если вы масштабируете и используете более одного сервера, лучше всего сохранять данные сеанса в базе данных. Таким образом, данные легко доступны по всему вашему стеку серверов (или ферме в зависимости от того, насколько большой вы собираетесь). Этого также можно добиться с помощью плоской файловой системы, но использование базы данных обычно является более элегантным и простым решением.

Единственное, о чем я могу подумать, если не использует базу данных, это просто количество запросов, которые вы будете выполнять. Для каждой загрузки страницы у вас будет дополнительный запрос для сбора данных сеанса. Тем не менее, один маленький дополнительный запрос не должен иметь такой большой разницы. Два пункта, которые я изложил выше, перевешивают эту небольшую стоимость.

Надеюсь, это немного помогло.

0 голосов
/ 22 сентября 2009

В дополнение к вышеуказанным сообщениям:

  • Сеансы базы данных (когда таблица сеансов имеет тип памяти) быстрее.
  • При использовании файловых сеансов файл сеанса блокируется до завершения сценария. Таким образом, у пользователя не может быть двух работающих одновременно сценариев на сервере. Это имеет значение, например, когда вы пишете сервер загрузки. Пользователь загружает файл, скрипт отправляет ему файл, оставляя файл сеанса заблокированным. И пользователь не может одновременно просматривать содержимое файлового архива.
0 голосов
/ 22 сентября 2009

Существует огромная разница при использовании нескольких серверов с механизмом балансировки нагрузки, который не гарантирует, что данное использование всегда будет отправляться на один и тот же сервер:

  • с файловым сеансом, если пользователь сбалансирован по нагрузке на сервер, который отличается от сервера, обслуживавшего предыдущую страницу, файл, содержащий его сеанс, не будет найден (как на другом сервере), и у него не будет данных сеанса
  • в сеансах на основе базы данных или на основе кэша памяти данные сеансов будут доступны с любого сервера - что довольно неплохо в такой ситуации.

Существует также разница, когда вы используете какой-то общий хостинг: при сеансе на основе файлов, если они помещаются в «временный» каталог сервера (например, / tmp), любой может прочитать ваши файлы сеансов в зависимости от Конфигурация сервера. В сеансах на основе БД эта проблема не существует, поскольку у каждого пользователя будут разные БД и пользователь БД.

0 голосов
/ 22 сентября 2009

На общем хосте, когда у вас нет контроля над тем, кто может получить доступ к каталогу, в котором хранятся файлы сеансов. В этом случае хранение сеансов в БД может обеспечить лучшую безопасность.

И один сценарий, с которым у меня самого нет опыта, но я считаю, что это реалистичный сценарий:
На ферме серверов с балансировкой нагрузки, где последующие запросы одного пользователя могут отправляться на несколько серверов. В этом случае вы можете выбрать один центральный сервер БД. В таком случае, если у вас не будет такого централизованного хранилища сеансов, данные сеансов пользователей будут потеряны, поскольку они могут переключать серверы по запросу.

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