Использование сессий для аутентификации на основе ролей - PullRequest
0 голосов
/ 20 сентября 2018

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

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?

...