Вопрос:

Переадресация на предыдущую страницу после входа в систему? PHP

php redirect login

89345 просмотра

16 ответа

252 Репутация автора

Я искал решение, но, похоже, я не могу понять это правильно, что бы я ни пытался.

После успешного входа в систему пользователь должен быть перенаправлен на страницу, с которой он пришел, скажем, он просматривал сообщение и хочет войти в систему, чтобы оставить комментарий, поэтому его следует перенаправить на сообщение, которое он просматривал. Итак, вот что у меня есть:

login.php показывает форму входа в систему:

<form method="post" action="login-check.php">
... //input for username and password
</form>

В Логин-check.php проверяет , является ли имя пользователя и пропуск введены, делает пользователь существует, или если он уже вошел в систему , а параметр ар отправляется login.php:

<?php
session_start();
if((empty($username) OR empty($password) AND !isset($_SESSION['id_login']))) {
   header("Location:login.php?p=1");
   exit();
}
elseif (!user_exists($username,$password) AND !isset($_SESSION['id_login'])) {
   header("Location:login.php?p=2");
   exit();
}
elseif(isset($_SESSION['id_login'])) {
   header("Location:login.php?p=3");
   exit();
}
?>

p отправляется обратно в login.php и отображает соответствующее сообщение:

<?php
if(isset($_GET['p'])) {
  $p = $_GET["p"];

  if($p=="1")
    echo "<p class=\"red\">You didn't fill the form.</p><br></br>";
  if($p=="2")
    echo "<p class=\"red\">User exists.</p><br></br>";
  if($p=="3")
    header("Location: index.php");
}
?>

НО, вместо того, чтобы перейти к index.php после успешного входа в систему, он должен перейти на страницу, на которой пользователь был ранее. Я пробовал по-разному, но в эфире он вообще не работает или возвращается в login.php. Это не должно быть супер безопасным, потому что я делаю это для школьного проекта.
ТАКЖЕ, я считаю себя довольно новичком, поэтому, пожалуйста, наберитесь терпения: D

Автор: Alejandra Uzelac Источник Размещён: 25.01.2013 02:10

Ответы (16)


3 плюса

604 Репутация автора

Вы, вероятно, должны поместить URL для перенаправления в переменную POST.

Автор: Tim Martens Размещён: 25.01.2013 02:13

0 плюса

39381 Репутация автора

Создайте действие формы таким образом, чтобы оно «запоминало» или сохраняло предыдущую страницу, записывая returnurl=valueпару ключ / значение строки запроса в URL-адрес - это можно передать с любой страницы, которая перенаправляет на страницу входа.

Автор: Grant Thomas Размещён: 25.01.2013 02:13

0 плюса

1692 Репутация автора

Я думаю, что вам может понадобиться $ _SERVER ['REQUEST_URI'];

if(isset($_SESSION['id_login'])) {
  header("Location:" . $_SERVER['REQUEST_URI']);
}

Это должно взять их URL и перенаправить их после успешного входа в систему.

Автор: Rob Размещён: 25.01.2013 02:17

8 плюса

137 Репутация автора

Когда пользователь попадает на страницу входа, используйте его, чтобы увидеть, откуда он

$_SERVER['HTTP_REFERER']

Затем установите это значение в сеансе, и когда он будет аутентифицирован, используйте URL из сеанса, чтобы перенаправить его обратно. Но вы должны сделать некоторую проверку прежде, если URL-адрес вашего сайта. Может быть, он пришел с другого сайта напрямую для входа в систему :)

Автор: Djordje Bakic Размещён: 25.01.2013 02:22

69 плюса

2780 Репутация автора

Решение

Обычный способ сделать это - передать текущую страницу пользователя в форму входа через $_GETпеременную.

Например: если вы читаете статью и хотите оставить комментарий. URL для комментариев есть comment.php?articleid=17. Пока comment.phpзагружается, он замечает, что вы не вошли в систему. Он хочет отправить вас login.php, как вы показали ранее. Тем не менее, мы собираемся изменить ваш сценарий, чтобы он также сообщал странице входа, что нужно запомнить, где вы находитесь:

header("Location:login.php?location=" . urlencode($_SERVER['REQUEST_URI']));
// Note: $_SERVER['REQUEST_URI'] is your current page

Это необходимо отправить пользователю: login.php?location=comment.php%3Farticleid%3D17. login.phpТеперь следует проверить, если $_GET['location']он заполнен. Если он заполнен, отправьте пользователя в это местоположение (в данном случае, comment.php?articleid=17). Например:

//  login.php
echo '<input type="hidden" name="location" value="';
if(isset($_GET['location'])) {
    echo htmlspecialchars($_GET['location']);
}
echo '" />';
//  Will show something like this:
//  <input type="hidden" name="location" value="comment.php?articleid=17" />

 

//  login-check.php
session_start();

//  our url is now stored as $_POST['location'] (posted from login.php). If it's blank, let's ignore it. Otherwise, let's do something with it.
$redirect = NULL;
if($_POST['location'] != '') {
    $redirect = $_POST['location'];
}

if((empty($username) OR empty($password) AND !isset($_SESSION['id_login']))) {
    $url = 'login.php?p=1';
    // if we have a redirect URL, pass it back to login.php so we don't forget it
    if(isset($redirect)) {
        $url .= '&location=' . urlencode($redirect);
    }
   header("Location: " . $url);
   exit();
}
elseif (!user_exists($username,$password) AND !isset($_SESSION['id_login'])) {
    $url = 'login.php?p=2';
    if(isset($redirect)) {
        $url .= '&location=' . urlencode($redirect);
    }
   header("Location:" . $url);
   exit();
}
elseif(isset($_SESSION['id_login'])) {
    // if login is successful and there is a redirect address, send the user directly there
    if($redirect) {
        header("Location:". $redirect);
    } else {
        header("Location:login.php?p=3");
    }
    exit();
}

Gotchas

Вы должны выполнить некоторую проверку $_GET['location']перед отправкой пользователя туда. Например, если я скажу людям, которые используют ваш сайт, чтобы перейти по этой ссылке: login.php?location=http%3A%2F%2Fmalice.com%2Fevilpage.php... тогда они будут отправлены на иностранный URL, который попытается сделать что-то плохое.

Обязательно используйте urlencodeпри передаче URL-адресов в качестве $_GETпараметров. Это кодирует специальные символы URL (такие как ?,, &и %), чтобы они не ломали ваш URL (например: login.php?location=comment.php?id=17<- это два ?и не будет работать правильно)

Автор: Chris Размещён: 25.01.2013 02:23

3 плюса

547 Репутация автора

Поскольку страница входа является отдельной страницей, я предполагаю, что вы хотите перенаправить на страницу, с которой пользователь достиг страницы входа.

$_SERVER['REQUEST_URI']будет просто держать текущую страницу. Что вы хотите сделать, это использовать$_SERVER['HTTP_REFERER']

Так что сохраните HTTP_REFERER в скрытом элементе в вашей форме, <input type="hidden" name="referer" value="<?= $_SERVER['HTTP_REFERER'] ?>" />но имейте в виду, что в PHP, который обрабатывает форму, вам потребуется некоторая логика, которая перенаправляет обратно на страницу входа в систему при неудачном входе, но также и для проверки того, что реферер действительно является вашим сайтом, если это не так, то перенаправьте обратно на домашнюю страницу.

Автор: philipobenito Размещён: 25.01.2013 02:25

2 плюса

80 Репутация автора

использовать что-то вроде

$_SERVER['HTTP_REFERER'];

И если это успешный вход в систему, отобразите ссылку с надписью «Нажмите здесь, чтобы вернуться назад» и ссылку на реферер, а когда страница загрузится, используйте некоторый JavaScript для автоматической загрузки этой страницы (не используйте back () или что-либо еще). Функция не загружает страницу и будет выглядеть так, как будто пользователь никогда не входил в систему.

Автор: Drew Размещён: 25.01.2013 02:49

2 плюса

1106 Репутация автора

Вы можете использовать сеанс, чтобы сохранить текущую страницу, на которую вы хотите вернуться после входа в систему, и это будет работать для других страниц, если вы поддерживаете сеанс должным образом. Это очень полезная техника, так как вы можете развить свою хлебную крошку, используя ее.

Автор: Sandeep Garg Размещён: 28.01.2013 05:12

1 плюс

11 Репутация автора

Вы должны попробовать что-то вроде $_SERVER['HTTP_REFERER'].

Автор: jpmaster77 Размещён: 14.01.2014 12:08

0 плюса

2564 Репутация автора

как насчет этого :: javascript + php

echo "<script language=javascript> javascript:history.back();</script>";

она будет работать так же, как предыдущая кнопка в вашем браузере

Автор: Ritabrata Gautam Размещён: 26.04.2014 12:15

7 плюса

111 Репутация автора

Вы можете сохранить страницу, используя php, например:

$_SESSION['current_page'] = $_SERVER['REQUEST_URI']

И вернитесь на страницу с:

header("Location: ". $_SESSION['current_page'])
Автор: Anthony Размещён: 22.04.2015 06:17

0 плюса

3402 Репутация автора

Используйте скрытый ввод на вашей странице входа. Подобно:

<input name="location" value="<?php if(!empty($_SERVER['HTTP_REFERER'])) echo $_SERVER['HTTP_REFERER']; else echo 'products.php'; ?>" type="text" style="display: none;" />
Автор: Elyor Размещён: 13.01.2016 03:35

-1 плюса

33 Репутация автора

Ответ @ philipobenito работал лучше всего для меня.
Сначала я создал скрытый вход, содержащий HTTP-реферер пользователя.

<input type="hidden" name="referer" value="<?= $_SERVER['HTTP_REFERER'] ?>" />

и после успешного входа я перенаправил пользователей к тому значению, которое хранилось в этом скрытом входе

$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
if(!empty($_POST['referer'])){
    header('Location: '.$_POST['referer']);
}
else{
    header('Location: members.php'); //members.php is a page used to send a user to their profile page.
}
exit;
Автор: Mister_Fix Размещён: 04.04.2016 05:29

3 плюса

3402 Репутация автора

Другой способ, используя сессию

Назначить текущий URL для сессии (используйте его на каждой странице)

$_SESSION['rdrurl'] = $_SERVER['REQUEST_URI'];

и на вашей странице входа используйте

if(isset($_SESSION['rdrurl']))
header('location: '.$_SESSION['rdrurl']);
else
header('location: http://example.com');
Автор: Elyor Размещён: 02.07.2016 10:32

0 плюса

516 Репутация автора

Сначала вы должны получить ссылку на страницу пользователя в переменной, используя $ _SERVER ['HTTP_REFERER']; на вашей странице входа.

ЛАЙК:

<?php 
    session_start();
    $refPage = $_SERVER['HTTP_REFERER']; 
?>

И теперь, когда пользователь нажимает на кнопку «Войти», меняйте местоположение заголовка на страницу со ссылкой пользователя.

ЛАЙК:

<?php 
if(isset($_POST[login])){
    session_start();
    header('location:' . $refPage);
}
?>

И в это время вы должны сначала убедиться, что пользователь ссылается на страницу пустую или нет, потому что ваш пользователь может перейти прямо на вашу страницу входа, тогда ваша переменная $ refPage будет пустой, поэтому после того, как страница Click to Login останется здесь

ЛАЙК:

<?php
if(isset($_POST[login])){
    session_start();
    $refPage = $_SERVER['HTTP_REFERER'];  // get reffer page url
    if(empty($refPage)){ 
        header('location: yourredirectpage'); // if ref page is empty then set default redirect page.
    }else{
        header('location:' . $refPage); // or if ref page in not empty then redirect page to reffer page
    }
}
?>


Или вы можете использовать скрытый тип ввода, где вы можете установить значение $ _SERVER ['HTTP_REFERER'];

ЛАЙК:

<input type="hidden" name="refPage" value="<?php echo $_SERVER['HTTP_REFERER']; ?>">

А когда пользователь нажимает кнопку « Войти», вы можете получить значение refPage и перенаправить предыдущую страницу. И вы также должны проверить пустую страницу ссылки. Потому что ваш пользователь может перейти прямо на вашу страницу входа.


Спасибо.

Автор: Obaidul Haque Размещён: 25.02.2018 11:16

0 плюса

93 Репутация автора

Я создал функцию для хранения URL предыдущей страницы

//functions.php

function set_previous_page_url(){

    $current_url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}"; 
    $previous_url = $_SERVER['HTTP_REFERER'];
    if (!($current_url === $previous_url)){
        $_SESSION['redirect_url'] = $previous_url;
    }
    if(isset($_SESSION['redirect_url'])){
        $url = $_SESSION['redirect_url'];
        return $url;

    } else {
        $url = "index.php";
        return $url;
    }
}

И вызвать эту функцию в login.php

// login.php

<?php
// set previous page url to redirect after login
$url = set_previous_page_url();

if(ifItIsMethod('post')){
    if(isset($_POST['username']) && isset($_POST['password'])){
        if (login_user($_POST['username'], $_POST['password'])) {
            redirect($url);
            //unset session defined in set_previous_page_url() function
            if(isset($_SESSION['redirect_url'])){
                unset($_SESSION['redirect_url']);
            }

        } 
    }
}
?>
Автор: Adnan Размещён: 11.08.2019 08:36
Вопросы из категории :
32x32