Использование сеансов для аутентификации на основе ролей

Я играю с сеансами для аутентификации пользователей и запуска функций. Я использую сеансы между двумя серверами. Ниже я описываю процесс того, что делаю.

1) С Server 1 передайте имя пользователя и пароль основному Server 2.

public function get_session_auth($username,$password){
        $resultArray = array(
            'result' => 'succeeded',
            'resultText' => null
        );

        $request = new HTTP_Request2($this->baseUrl. 'index.php/login/get_session_id_via_login?username='.$username.'&password='.$password, HTTP_Request2::METHOD_GET);
        if (ENVIRONMENT === 'development') {
            $request->setConfig(array('ssl_verify_peer' => false));
        }
        //$request->setAdapter('curl');
        try {
            $response = $request->send();
            if (200 == $response->getStatus()) {
                $resultArray = json_decode($response->getBody(), true);
            } else {
                $resultArray['result'] = 'failed';
                $resultArray['resultText'] = 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
                $response->getReasonPhrase();
                // Here we should write data to log file.
                $this->getLogger()->error($resultArray['resultText']);
            }
        } catch (HTTP_Request2_Exception $e) {
            $resultArray['result'] = 'failed';
            $resultArray['resultText'] = 'Error: ' . $e->getMessage();
            // Here we should write data to log file.
            $this->getLogger()->error($resultArray['resultText']);
        }
        $resultArray['operation_name'] = 'get_session_auth';
        return $resultArray; 
    }

2) Я вхожу в систему с помощью username и password в Sever 2, запускаю сеанс и сохраняю такую ​​информацию, как ( id, user_id, role = (Admin, Batch) ), в $_SESSION. 3) Я беру session_id и передаю обратно Sever 2

$session_id = session_id();
return $session_id;

4) Теперь я вызываю некоторые функции в Server 2, используя GET из Server 1, а также передаю session_id в качестве переменной в URL-адресе.

public function dosomething($session_id)
    {
        $resultArray = array(
            'result' => 'succeeded',
            'resultText' => null
        );

        $request = new HTTP_Request2($this->baseUrl. 'index.php/payment/dosomething/true?session_id='.$session_id, HTTP_Request2::METHOD_GET);
        if (ENVIRONMENT === 'development') {
            $request->setConfig(array('ssl_verify_peer' => false));
        }
        //$request->setAdapter('curl');
        try {
            $response = $request->send();
            if (200 == $response->getStatus()) {
                $resultArray = json_decode($response->getBody(), true);
            } else {
                $resultArray['result'] = 'failed';
                $resultArray['resultText'] = 'Unexpected HTTP status: ' . $response->getStatus() . ' ' .
                $response->getReasonPhrase();
                // Here we should write data to log file.
                $this->getLogger()->error($resultArray['resultText']);
            }
        } catch (HTTP_Request2_Exception $e) {
            $resultArray['result'] = 'failed';
            $resultArray['resultText'] = 'Error: ' . $e->getMessage();
            // Here we should write data to log file.
            $this->getLogger()->error($resultArray['resultText']);
        }
        $resultArray['operation_name'] = 'dosomething';
        return $resultArray;
    }

5) Я беру session_id по URL-адресу в Server 2, а затем пытаюсь использовать

session_id( 'session_id' );
session_start();

6) Проблема в том, что я ожидаю, что переменная $_SESSION будет иметь ранее сохраненный (id, user_id, role=(Admin,Batch), но переменная $ _SESSION` пуста, даже если session_id тот же, где я хранил эту информацию раньше.

Итак, как я могу получить информацию, хранящуюся в первом $_SESSION?

вам необходимо иметь файл cookie с данными сеанса на обоих серверах, чтобы получить к нему доступ

lovelace 20.09.2018 10:01

@lovelace, пожалуйста, уточнить немного подробнее, я не очень хорошо это понял. Вся коммуникация происходит в серверной части, так что куки вообще будут работать?

Masnad Nihit 20.09.2018 10:02

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

lovelace 20.09.2018 10:10

@lovelace второй сервер - это в основном то место, где я получаю session_id, и я передаю session_id на сервер 1, а затем снова передаю его обратно на сервер 2, чтобы начать сеанс. Вы говорите мне, что мне нужно передать session.save_path обратно на сервер 1 вместе с session_id, а затем найти путь, по которому хранится сеанс, и запустить его? К этому моменту временный файл не будет удален?

Masnad Nihit 20.09.2018 10:15

это может помочь вам на вашем пути stackoverflow.com/questions/6490875/…

lovelace 20.09.2018 10:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
5
24
0

Другие вопросы по теме