Не удается перенаправить с помощью переменных $_SERVER, PHP
У меня есть приложение PHP (форма запроса), которое сначала проверяет наличие активного $_SESSION, прежде чем пользователь сможет получить доступ к сайту. Из-за времени ожидания, установленного для этой формы, активная сессия бывает редко . Вот чек:
if (isset($_SESSION['samlUserdata'])) {
$attributes = $_SESSION['samlUserdata'];
$user_department = $attributes['department'];
$user_email = $attributes['email'];
$user_employee_id = $attributes['employee_id'];
$user_full_name = $attributes['full_name'];
}
... и вот еще {}, который я использую для захвата REQUEST_URI:
else {
if (isset($_SERVER['REQUEST_URI'])) {
$referer = $_SERVER['REQUEST_URI'];
$redirect = "https://myinternalwebsite.net$referer";
}
header("Location: https://myinternalwebiste.net/confirm_auth.php?sso");
}
...и последнее, вот что я делаю с $_GET
if (isset($_GET['sso'])) {
if (isset($redirect)) {
$auth->login($redirect);
} else {
$auth->login("https://myinternalwebsite.net/");
}
}
Однако, как только мой сеанс завершается, я никогда не возвращаюсь должным образом к URL-адресу, указанному в ['REQUEST_URI'], я всегда просто выгружаюсь на главную страницу внутреннего сайта. Я устранял эту неполадку в течение некоторого времени на прошлой неделе, но безрезультатно. Я пробовал и другие переменные в массиве $_SERVER, например ['REDIRECT_URL'].
Я в недоумении, и я уверен, что это довольно просто для любого, у кого больше опыта, чем у меня... так что я внимательно слушаю и хочу учиться.
РЕДАКТИРОВАТЬ:
Спасибо за комментарии ниже. По вашему совету я добавлю сюда весь свой код, удалив только ненужные части. (И да, я ценю подсказку, чтобы заменить начальный (isset()) на (!isset(). Спасибо за это.)
<?php
session_start();
$auth = new OneLogin\Saml2\Auth($saml_settings);
if (isset($_SESSION['samlUserdata'])) {
$attributes = $_SESSION['samlUserdata'];
$user_department = $attributes['department'];
$user_email = $attributes['email'];
$user_employee_id = $attributes['employee_id'];
$user_full_name = $attributes['full_name'];
} else {
if (isset($_SERVER['REQUEST_URI'])) {
$referer = $_SERVER['REQUEST_URI'];
$redirect = "https://example.net$referer";
}
header("Location: https://example.net/confirm_auth.php?sso");
}
if (isset($_GET['sso'])) {
if (isset($redirect)) {
$auth->login($redirect);
} else {
$auth->login("https://example.net/");
}
} else if (isset($_GET['slo'])) {
$auth->logout();
} else if (isset($_GET['acs'])) {
$auth->processResponse();
$errors = $auth->getErrors();
if (!empty($errors)) {
echo '<p>', implode(', ', $errors), '</p>';
}
if (!$auth->isAuthenticated()) {
echo "<p>Not authenticated!</p>";
exit();
}
$_SESSION['samlUserdata'] = $auth->getAttributes();
if (isset($_POST['RelayState']) &&
OneLogin\Saml2\Utils::getSelfURL() != $_POST['RelayState']) {
$auth->redirectTo($_POST['RelayState']);
}
} else if (isset($_GET['sls'])) {
$auth->processSLO();
$errors = $auth->getErrors();
if (empty($errors)) {
echo '<p>Sucessfully logged out!</p>';
} else {
echo '<p>', implode(', ', $errors), '</p>';
}
}
?>