Intereting Posts
PHP и MySQL – самая маленькая и самая большая возможная дата Как сгенерировать сертификат DER / PEM из общедоступного показателя и модуля RSA? Это инъекция зависимостей, и это плохая практика? Группы PHP и LOOPS Как получить котировки акций с помощью Google Finance API? Использование print_r и var_dump с круговой ссылкой Может mysql_real_escape_string ALONE предотвратить все виды SQL-инъекций? Чтобы передать значение переменной в одной функции другой функции в том же классе Резервное копирование баз mySQL из локального хоста на Wamp-сервере Невозможно ограничить действия пользователя после успешного входа в codeigniter Использовать PHP для динамического добавления в файл .htaccess? Как получить данные mysql в порядке убывания? Исправление Chrome Origin null не разрешено Access-Control-Allow-Origin Отправить письмо с PHP из html-формы на submit с тем же скриптом WooCommerce – обрабатывать элементы корзины отдельно, если количество больше 1

Перенос сеанса через сервер в PHP

Мне нужно перенести сеанс пользователя по серверам. то есть. Если пользователь вошел в систему server1, и если пользователь существует на сервере2, то мне нужно передать данные сеанса пользователя на server2. Для этого я использовал следующую технику

С сервера1 перенаправляйте пользователя на http: //server2/auth_from_server1.php? Sessionid = 12345 На сервере2 (внутренне, в PHP-коде auth_from_server1.php) выполните запрос на http: //server1/secret/check_session_id.php с sessionid, 12345. На сервере1, в реализации check_session_id.php, проверьте идентификатор и верните OK, FAILURE и связанные с сеансом данные, которые вы хотите передать, например имя пользователя, … На сервере2, когда вызов возвращается с помощью OK , сохранить переданные данные сеанса и предоставить пользователю cookie и сеанс для этого сервера.

Но когда функция обратного вызова вызывает auth_from_server1.php, значение в идентификаторе сеанса равно null. Я попытался проверить sessionid как

if(isset($_SESSION['sessionId'])) echo 'true'; else echo 'false'; 

Но $ _SESSION ['sessionId'] равно null. На странице входа я устанавливаю значение для идентификатора сеанса как

 $_SESSION['sessionId'] = session_id(); 

Заранее спасибо….

Не было бы проще просто хранить данные сеанса в общей папке?

В качестве альтернативы вы можете сохранить его в базе данных.

Я бы предложил написать собственный обработчик сеанса PHP или использовать предварительно обработанный обработчик сеансов, например, ShareDance . Вы можете хранить информацию о сеансе в базе данных MySQL, совместно используемой между двумя машинами, SQLite-файле и т. Д.

Существует много преимуществ использования встроенной возможности PHP для получения / установки данных сеанса с помощью session_set_save_handler (), а именно, что все вызовы для получения или установки из $ _SESSION будут работать в вашем коде приложения без каких-либо дополнительных изменений.

Более подробную информацию можно найти здесь: http://php.net/manual/en/function.session-set-save-handler.php

Учебник по написанию пользовательских обработчиков сеансов (старый, но по-прежнему актуальный) находится здесь: http://devzone.zend.com/article/141

Когда сервер 2 вызывает server1 / secret / check_session_id.php, он должен предоставить идентификатор сеанса, такой как server1 / secret / check_session_id.php? Sessionid = 12345, а в check_session_id.php вам нужно вызвать session_id($_GET['sessionid']) до session_start() .

Еще одна возможность – обмен файловой системой. Поскольку PHP помещает сеанс в файловую систему, вы можете совместно использовать файловую систему (например, sshfs) на обоих серверах.

параметр для изменения каталога назначения в php.ini

 session.save_path 

Я думаю, что хранить идентификатор пользователя в БД – это наиболее подходящий способ сделать это. Это способ доказательства ошибок.

ура

Эта проблема может быстро выйти из рук, когда вы начнете добавлять к проблеме все больше и больше проблем. Одним из лучших решений, которые я нашел, является сохранение сеанса в базе данных и совместное использование этой базы данных с серверами. Redis обычно отлично подходит для этого. Вот отличный справочник для начала работы с redis