Не удается перенаправить с помощью переменных $_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>';
        }
    }

?>

0 ответов

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