У меня есть система учетных записей на accounts.example.com
.
Когда пользователь вошел в систему на accounts.example.com
, идентификатор сеанса будет сохранен в файле cookie, который доступен в .example.com
(во всех поддоменах).
subdomain.example.com
находится на другом сервере и не имеет доступа к данным сеанса и базе данных системы учетных записей.Как я проверяю, вошел ли пользователь в систему, получаю ли я идентификатор сеанса (так как он доступен во всех поддоменах).Затем я отправляю HTTP-запрос на сервер учетных записей с идентификатором сеанса и паролем (пароль для защиты HTTP-запросов).
HTTP-запрос от subdomain.example.com
выглядит следующим образом.
$sessionId = $_COOKIE[$sessionCookieName];
$post = http_build_query(
array (
'http_secret' => AUTH_HTTP_SECRET,
'session_id' => $sessionId
)
);
$opts = array('http' =>
array (
'method' => 'POST',
'user_agent' => $_SERVER['HTTP_USER_AGENT'],
'content' => $post
)
);
$context = stream_context_create($opts);
$url = 'https://account.example.com/check-login';
$response = @file_get_contents($url , false, $context);
Итак, HTTP-запрос будет отправлен на accounts.example.com/check-login
.
check-login.php
на accounts.example.com
следующим образом.
$httpSecret = $_POST['http_secret'];
// if it is from an invalid client
if ($httpSecret !== HTTP_SECRET) {
throw new Exception('HTTP Error');
}
$sessionId = $_POST['session_id'];
# set the session ID
session_id($sessionId);
# then, I get the session data and checks if the user is logged in
Если пользователь вошел в систему, я возвращаюсьотносящиеся к аккаунту данные на subdomain.example.com
.
Этот подход хорош или плох?
Заранее спасибо.