2012-02-07 2 views
4

Я пишу совершенно новый веб-сайт, и я хотел бы убедиться, что он легко масштабируется, если я когда-либо доберусь до точки, где должен размещать сайт на нескольких машинах с балансировщиком нагрузки.Какова альтернатива переменным сеанса PHP?

Пользователь веб-сайта может быть аутентифицирован. Другими словами, мне нужно сохранить некоторую информацию о состоянии. Мой первый рефлекс заключался в использовании переменных Session, но тогда я ограничусь одной машиной. Я знаю, что есть способы хранить переменные сеанса снаружи (в БД, redis, memcached), но это единственные опции?

Каковы альтернативы переменной сеанса? Как Facebook и другие крупные веб-сайты делают это?

P.S. Я не ищу другого обработчика сеанса (DB, redis и т. Д.). Я хотел бы знать, есть ли способ полностью избавиться от переменных сеанса.

+2

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

+0

Я вижу вашу точку Эли. Но я не беспокоюсь о том, что переменная сеанса является узким местом ... Я просто хочу убедиться, что сервис масштабируется без особых усилий. Похоже, что переменная сеанса - это путь. Я прыгал, там был бы лучший способ сделать это в 2012 году ... Мне было бы интересно узнать, как это делает StackOverflow ... – Martin

ответ

1

Вы можете посмотреть в кеширование, например, с помощью Zend cache или APC cache.

+1

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

8

Когда-либо слышал о session_set_save_handler? Он позволяет использовать механизмы, отличные от обработчика сеанса PHP по умолчанию (тот, который записывает файлы sess_xxxxxxxxxxxx в каталог tmp).

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

+0

Бинго. Чтобы ответить на этот вопрос, это то, что делает Facebook (через memcached, IIRC). – ceejayoz

+0

Спасибо, ceejayoz! Есть ли где-нибудь какие-то документы? Я удивлен, узнав, что Facebook использует переменные сеанса ... – Martin

+0

Зачем вам это удивляться? Они необходимы для всего, что может сделать социальная сеть - например, статус входа в систему. – ceejayoz

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