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
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)
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 :)
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'])
vous devriez probablement placer l'url vers laquelle rediriger dans une variable POST.
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.
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é.
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.
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');
Vous devriez essayer quelque chose comme $_SERVER['HTTP_REFERER']
.
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.
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.
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
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;" />
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.
<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;