Как управлять одним сеансом PHP5 на нескольких серверах Apache?

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

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

Related of "Как управлять одним сеансом PHP5 на нескольких серверах Apache?"

Вам придется использовать другой обработчик сеанса.

Ты можешь:

  • создайте свой собственный (см. session_set_save_handler ) или
  • использовать расширения, которые предоставляют собственный обработчик сеанса, например memcached

Другой вариант – использовать memcached для хранения сеансов.

Важно то, что у вас должен быть общий ресурс – будь то база данных SQL, memcached, база данных NoSQL и т. Д., К которой могут обращаться все серверы. Затем вы используете session_set_save_handler для доступа к общему ресурсу.

В дополнение ко всем этим ответам:

Если вы храните сеансы в базах данных, убедитесь, что сбор мусора сессий в PHP действительно активирован (это не относится к дистрибутивам, подобным Debian, они решили сбрасывать сеансы со своим собственным cron и изменяли php.ini, чтобы он никогда не запускал никаких gc, поэтому проверьте session.gc_probability и session.gc_divisor ). Основная проблема sessionstorage в базе данных заключается в том, что это означает много запросов на запись и большой конфликтный доступ в базе данных. Это отличный способ подчеркнуть сервер базы данных, такой как MySQL. Таким образом, IMHO с использованием другого решения лучше, это держит ваше соотношение чтения и записи в лучшем режиме веб-базы данных.

Вы также можете сохранить файловую систему хранения и просто обмениваться файловым каталогом между серверами с помощью NFS . Измените параметр session.save_path чтобы использовать что-то другое, кроме /tmp . Но NFS по определению не самый быстрый способ использования диска. Предпочитайте memcached или mongodb для быстрого доступа.

Если единственное, что вам нужно для совместного использования между сервером, это аутентификация , то вместо совместного использования реального хранилища сеансов вы можете использовать аутентификационные данные аутентификации. Как и система OpenId в SO, это то, что мы называем SSO, для веб-части у вас есть несколько решений, от OpenId до CAS и других. Если данные объединяются на стороне клиента (ajax, ESI-gate), вам не требуется общее хранилище данных сеанса на стороне сервера. Это позволит избежать одновременного использования трех из ваших 5 влияющих веб-приложений, записывающих данные в общий сеанс. Другие методы совместного использования сеансов (база данных, NFS, даже memcached) в основном используются для обмена данными между несколькими серверами, потому что инструменты балансировки нагрузки могут помещать ваш последовательный HTTP-запрос с одного сервера на другой, но если вы действительно подразумеваете параллельный сбор данных, вы должны действительно исследование SSO.

Храните сеансы в базе данных, доступной из всего пула серверов.

Храните его в базе данных – чтобы все серверы подключались к той же базе данных. Первый результат для « сессии php store в базе данных »