перенаправить на запрашиваемую страницу после входа в систему с помощью функции PHP - PullRequest
0 голосов
/ 22 января 2020

У меня есть функция, которая отображает $_SESSION значение на странице входа в систему и сохраняет $_SERVER['REQUEST_URI'] как $_SESSION значение на другой странице, и она отлично работает.

Но мне нужно вызвать функцию redirect_after_login в вся страница продукта, поэтому я просто добавил строку после redirect_after_login

Итак, моя функция. php файл будет выглядеть по ссылке

<?php

session_start();
$key = '';

function redirect_after_login($value) {
if (!empty($value)) {
    echo $_SESSION['url'];
  } else {
      echo $_SESSION['url'] = $_SERVER['REQUEST_URI'];
  }
}

$activate_finction = $key == true ? 'Yes' : '';
$url = redirect_after_login($activate_finction);

И в логин. php я добавил

$key .= 'login';//calling redirect function with value so it should send session value


if (isset($_POST['submit'])) {
        // login function skipped it....
            header('location:' . $url);
            exit;
        } else {
            $error[] = 'Wrong username or password or your account has not been activated.';
        }
    }

Так как $key .= 'login'; имеет значение

$activate_finction = $key == true ? 'Yes' : '';
$url = redirect_after_login($activate_finction);

Функция теперь вызывается с ==true, поэтому я должен получить сохраненное значение, но все еще я получаю requested_url

Моя проблема на всей странице, я получаю $_SESSION['url'] = $_SERVER['REQUEST_URI']; это значение.

Как мне получить значение сеанса login.php и во всем продукте Функция pages должна хранить requested_url в качестве значения сеанса.

1 Ответ

1 голос
/ 22 января 2020

Я выполняю рефакторинг кода, поэтому вот вам полный пример:

функция. php:

<?php
    session_start();

    if (isset($_SERVER['HTTP_REFERER']) && basename($_SERVER['HTTP_REFERER']) != basename($_SERVER['PHP_SELF'])) {
        $_SESSION['url'] = $_SERVER['HTTP_REFERER'];
    }

    function redirect_after_login() {
        header('Location:' . $_SESSION['url']);
    }
?>

product. php:

<?php
    include "function.php";
?>
<html>
    <head></head>
    <body>
        This is <?php echo $_SERVER['PHP_SELF']; ?> file.<br><br>
        <input type="button" name="login" value="Login" onclick="location.href='login.php'">
    </body>
</html>

логин. php

<?php
    include "function.php";

    if(isset($_POST['submit'])){
        if($_POST['username'] == 1 && $_POST['password'] == 1){
            //success
            $_SESSION['logged'] = 1;
            redirect_after_login();
        }else{
            //error
            $_SESSION['logged'] = 0;
            $error = 'Wrong username or password';
        }
    }else{
        unset($error);
    }
?>
<html>
    <head></head>
    <body>
        This is <?php echo $_SERVER['PHP_SELF']; ?> file.<br><br>
        <form method="post" action="login.php">
            User: <input type="text" name="username"><br>
            Pass: <input type="password" name="password"><br>
            <input type="submit" name="submit" value="Login">
        </form>
        <?php
            if(isset($error)) echo "ERROR:" .$error;
        ?>
    </body>
</html>

Некоторые краткие пояснения:

  • для проверки redirect logi c, вы можете загрузить product.php?id=258 изначально;
  • $_SESSION['url'] хранит HTTP_REFERER - страница, с которой вы идете;
  • login.php вызывает функцию redirect_after_login() на успешный вход в систему (в настоящее время с пользователем: 1 / pass: 1, только для примера)
  • при успешном входе в систему есть дополнительная переменная SESSION logged, которую вы можете использовать далее (например, чтобы скрыть кнопку LOGIN на product.php page)
  • при неправильном входе в систему отображается ошибка, но пользователь остается на экране входа в систему.
  • $_SESSION['url'] перезаписывается каждый раз, когда вы посещаете другую страницу и только тогда. Это предотвращает потерю HTTP_REFERER в случае неудачного входа в систему (если у вас есть рефр sh и HTTP_REFERER становится самой страницей)

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...