Привет, мне нужно получить данные с нескольких веб-серверов. Сначала я вхожу в систему как пользователь на свой веб-сайт. После успешного входа я должен получить данные с разных веб-серверов и отобразить их. Как я могу поделиться одним сеансом с несколькими серверами. Как я могу это достичь?
Когда я впервые вхожу в систему, он создает идентификатор сеанса и сеанса, сохраненный во временной папке этого сервера. Когда я пытаюсь получить доступ к другому серверу, как я могу использовать текущий сеанс, который уже был создан при входе в систему. Может ли кто-нибудь предложить решение?
Вам придется использовать другой обработчик сеанса.
Ты можешь:
session_set_save_handler
) или Другой вариант – использовать 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 в базе данных »