Я играю с сеансами для аутентификации пользователей и запуска функций. Я использую сеансы между двумя серверами. Ниже я описываю процесс того, что делаю.
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?
@lovelace, пожалуйста, уточнить немного подробнее, я не очень хорошо это понял. Вся коммуникация происходит в серверной части, так что куки вообще будут работать?
По умолчанию данные сеанса хранятся во временном файле на сервере - вашему второму серверу также потребуется этот файл. Расположение временных файлов должно быть указано директивой session.save_path в вашем конфигурационном файле PHP.
@lovelace второй сервер - это в основном то место, где я получаю session_id, и я передаю session_id на сервер 1, а затем снова передаю его обратно на сервер 2, чтобы начать сеанс. Вы говорите мне, что мне нужно передать session.save_path обратно на сервер 1 вместе с session_id, а затем найти путь, по которому хранится сеанс, и запустить его? К этому моменту временный файл не будет удален?
это может помочь вам на вашем пути stackoverflow.com/questions/6490875/…






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