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

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

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

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

4b9b3361

Ответ 1

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

Вы можете:

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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