2010-06-29 4 views
3

Я играю с созданием системы входа пользователя в php.Использовать или не использовать session_set_save_handler?

Я изучаю эту статью (http://www.evolt.org/node/60384) как способ приблизиться к этому.

В данной статье автор использует комбинацию $ _SESSION и собственной таблицы базы данных для хранения информации о пользователе.

Однако ...

Я также встретить многочисленные статьи, которые рекомендуют использовать session_set_save_handler для настройки PHP сессии, чтобы использовать базу данных изначально. (Я думаю, это более новая методика.)

Мне интересно: если я планирую настроить таблицу «activeUsers» в базе данных для записи данных сеанса, имеет ли смысл использовать session_set_save_handler? (Кажется, что если я использую базу данных для хранения какой-либо информации о сеансе в любом случае, я мог бы также обойтись без сессий файловой системы.)

Или есть некоторые преимущества, чтобы оставить php-сессии в их файловой системе по умолчанию, а затем x-check пользователя для моей пользовательской таблицы db?

Спасибо (заблаговременно) за вашу помощь.

ответ

2

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

Безопасность: При использовании совместного хостинга данные сеанса могут храниться в областях диска, которые доступны другим пользователям система. Это может представлять угрозу безопасности для вашего приложения.

Масштабируемость: Если ваша заявка обрабатывается более чем на один сервер (сервер фермы, для instance_, вам необходимо убедиться, что несколько запросов от одного клиента, который может быть обработан различными серверами, каждый получит то же самое . данные сессии Это довольно легко сделать, если данные сеанса в базе данных

Производительность:.. хранения базы данных могут дать прирост производительности по сравнению с хранением файловой системы, но это сильно зависит от конфигурации сервера

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

Что-то еще следует учитывать, что вы можете улучшить информацию о сеансе, сохраняя дополнительную информацию, такую ​​как IP-адреса, время входа в систему и время выхода из системы и т. Д. Такая информация может быть полезна при попытке предотвратить захват сеанса.

Так что, помимо проблемы масштабируемости, я думаю, что все это довольно субъективно. Вам необходимо учесть дополнительную работу, необходимую для создания хранилища сеансов базы данных, с возможными преимуществами.

+0

Спасибо Майку за ответ. Рассматривая эти 4 причины, ни один из них не относится к моему делу. Поэтому у меня нет проблем с использованием обычных сеансов - * except * - Я планирую создать таблицу активных пользователей «activeUsers». Я до сих пор неясно, имеет ли смысл, чтобы сеансы использовали базу данных изначально, если какая-либо информация о сеансе пользователя будет собираться в базе данных в любом случае. – Travis

+1

@Travis: Звучит не так, как если бы вы * нуждались * для хранения данных сеанса в базе данных, но ваше приложение может оказаться немного чище, если вы это сделаете. Вы можете попробовать пакет [Pear HTTP_Session2] (http://pear.php.net/package/HTTP_Session2), если вы не хотите писать свой собственный обработчик. – Mike

1

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

Смежные вопросы