Redirection vers la page précédente après connexion? PHP

j'ai cherché une solution mais il semble que je n'y arrive pas, peu importe ce que j'essaie.

après une connexion réussie, l'utilisateur doit être redirigé vers la page d'où il vient, disons qu'il a parcouru un post et veut se connecter afin qu'il puisse laisser un commentaire, donc il devrait être redirigé vers le post qu'il parcourait. Voici donc ce que j'ai:

connexion.php affiche le formulaire de connexion:

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

login-case.php vérifie si le nom d'utilisateur et le mot de passe sont entrés, si l'utilisateur existe ou s'il est déjà connecté, et si un paramètre p est envoyé à 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 est envoyé à connexion.php et affiche le message:

<?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");
}
?>

mais, au lieu d'aller à l'index.php après une connexion réussie, il devrait aller à la page que l'Utilisateur a été précédemment. J'ai essayé de différentes façons, mais ça ne marche pas du tout ou ça retourne à la connexion.php. Il n'a pas besoin d'être super sûr, parce que je fais ça pour un projet scolaire.

En outre, je me considère comme assez novice, alors s'il vous plaît avoir la patience: D

40
demandé sur Alejandra Uzelac 2013-01-25 18:10:05

15 réponses

une façon courante de faire ceci est de passer la page courante de l'utilisateur au formulaire de connexion via un $_GET variable.

par exemple: si vous lisez un Article, et que vous voulez laisser un commentaire. L'URL pour les commentaires est comment.php?articleid=17. Alors que les comment.php charge, il remarque que vous n'êtes pas connecté. Il veut vous envoyer à login.php, comme vous l'avez montré plus tôt. Cependant, nous allons changer votre script de façon à ce qu'il indique également la page de connexion pour se rappeler où vous sont:

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

ceci devrait envoyer l'utilisateur à: login.php?location=comment.php%3Farticleid%3D17. login.php devrait maintenant vérifier si $_GET['location'] est rempli. S'il est rempli, envoyez l'utilisateur à cet endroit (dans ce cas, comment.php?articleid=17). Par exemple:

//  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();
}

Astuces

vous devriez exécuter une validation contre $_GET['location'] avant d'y envoyer l'utilisateur. Par exemple, si je dis aux personnes qui utilisent votre site de cliquer sur ce lien:login.php?location=http%3A%2F%2Fmalice.com%2Fevilpage.php... ensuite, ils seront envoyés à une URL étrangère qui va essayer de faire quelque chose de mal.

assurez-vous toujours d'utiliser urlencode en passant URLs comme $_GET paramètres. Cela code des caractères spéciaux D'URL (tels que ?,& et %) pour qu'ils ne cassent pas votre url (par exemple:login.php?location=comment.php?id=17 < - il y en a deux ?'s et ne fonctionnera pas correctement)

59
répondu Chris 2013-01-25 15:40:29

lorsque l'utilisateur arrive à la page de connexion utilisez ceci pour voir d'où vient

$_SERVER['HTTP_REFERER']

puis définissez cette valeur dans la session, et quand il est authentifié utilisez url de la session pour le rediriger. Mais vous devriez vérifier avant, si l'url est votre site. Peut-être qu'il vient directement d'un autre site pour se connecter :)

8
répondu Djordje Bakic 2013-01-25 14:22:11

vous pouvez enregistrer une page en utilisant php, comme ceci:

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

Et revenir à la page:

header("Location: ". $_SESSION['current_page'])
6
répondu Anthony 2015-06-12 18:56:22

vous devriez probablement placer l'url vers laquelle rediriger dans une variable POST.

3
répondu Tim Martens 2013-01-25 14:13:09

puisque la page de connexion est une page séparée, je suppose que vous voulez rediriger vers la page à partir de laquelle l'Utilisateur a atteint la page de connexion.

$_SERVER['REQUEST_URI'] tiendra simplement la page courante. Ce que vous voulez faire est d'utiliser $_SERVER['HTTP_REFERER']

alors sauvegardez le HTTP_REFERER dans un élément caché sur votre formulaire <input type="hidden" name="referer" value="<?= $_SERVER['HTTP_REFERER'] ?>" /> mais gardez à l'esprit que dans le PHP qui traite le formulaire vous aurez besoin d'une logique qui redirige vers la page de connexion si login échoue, mais aussi de vérifier que le referer est en fait votre site web, si ce n'est pas, puis rediriger vers la page d'accueil.

3
répondu philipobenito 2013-01-25 14:25:06

utilisez quelque chose comme

$_SERVER['HTTP_REFERER'];

et si c'est une connexion réussie, affichez un lien disant "Cliquez ici pour revenir en arrière" et un lien vers le referrer, et quand la page se charge, utilisez un javascript pour charger automatiquement cette page (n'utilisez pas back() ou n'importe quelle autre fonction est car elle ne se chargera pas la page et il apparaîtra comme l'utilisateur jamais connecté.

2
répondu Drew 2013-01-25 14:49:03

vous pouvez utiliser session pour stocker la page courante sur laquelle vous voulez retourner après connexion et cela fonctionnera pour les autres pages si vous maintenez session correctement. Il est très utile que vous pouvez développer votre fil d'ariane de l'utiliser.

2
répondu Sandeep Garg 2013-01-28 05:12:59

une Autre manière, à l'aide de SESSION

Attribuer une URL en cours de session (sur chaque page)

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

et dans votre page de connexion, utilisez

if(isset($_SESSION['rdrurl']))
header('location: '.$_SESSION['rdrurl']);
else
header('location: http://example.com');
2
répondu Elyor 2016-07-02 10:32:36

Vous devriez essayer quelque chose comme $_SERVER['HTTP_REFERER'].

1
répondu jpmaster77 2014-01-14 00:29:54

construisez l'action de forme telle qu'elle 'se rappelle', ou persiste, la page précédente en écrivant un returnurl=value paire clé/valeur de la chaîne d'interrogation à L'URL - cette valeur peut être transmise à partir de n'importe quelle page qui redirige vers login.

0
répondu Grant Thomas 2013-01-25 14:13:16

je pense que vous pourriez avoir besoin de la valeur de $_SERVER['REQUEST_URI'];

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

qui devrait prendre l'url où ils sont et les rediriger après une connexion réussie.

0
répondu Rob 2013-01-25 14:17:16

Que diriez-vous de ceci:: javascript+php

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

il fonctionnera même que le bouton précédent de votre navigateur

0
répondu Ritabrata Gautam 2014-04-26 12:15:16

Utilisez les entrées cachées dans votre page de connexion. Comme:

<input name="location" value="<?php if(!empty($_SERVER['HTTP_REFERER'])) echo $_SERVER['HTTP_REFERER']; else echo 'products.php'; ?>" type="text" style="display: none;" />
0
répondu Elyor 2016-01-13 03:35:52

vous devriez d'abord obtenir la page de référence de l'utilisateur dans une variable en utilisant $_SERVER['HTTP_REFERER']; dans votre page de connexion.

LIKE:

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

et maintenant quand l'utilisateur clique pour se connecter puis changer l'emplacement de l'en-tête à la page de référence de l'utilisateur

LIKE:

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

et dans ce temps vous devriez d'abord vérifier que l'utilisateur renvoie la page vide ou non parce que votre utilisateur peut visiter direct votre page de connexion alors votre variable $ refPage sera vide donc après avoir cliqué sur la page de connexion reste ici

LIKE:

<?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
    }
}
?>



Ou vous pouvez utiliser un input type hidden où vous pouvez définir la valeur de $_SERVER['HTTP_REFERER'];

LIKE:

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

et quand un utilisateur clique pour se connecter alors vous pouvez obtenir le refPage valeur et redirection de la page précédente. Et vous devriez également vérifier la page de référence vide. Parce que votre utilisateur peut consulter directement votre page de connexion.



Merci vous.

0
répondu Obaidul Haque 2018-02-25 23:16:47

J'ai d'abord créé une entrée cachée qui contient le référent HTTP de L'utilisateur

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

et après une connexion réussie j'ai redirigé les utilisateurs vers n'importe quelle valeur stockée dans cette entrée cachée

$_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;
-1
répondu Iliya Golik 2016-06-07 09:11:40