Comment rediriger l utilisateur sur une page après connexion

Résolu/Fermé
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 - 20 juin 2021 à 20:22
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 - 21 juin 2021 à 23:25
bonjour a tous
certaines parties de mon site ne sont réservées qu aux utilisateurs enregistrer
pour l instant je fonctionne de cette façon
lorsque l utilisateur arrive sur une page qui est protégée il est redirige vers une page ou je lui demande soit de se connecter soit de s enregistrer
une fois cela effectuer il est redirige vers la page d accueil
mais j aurais souhaiter savoir si cela était possible de le rediriger vers la page qui était protégée avant son inscription ou sa connexion

j ai lu que cela était possible de le rediriger vers la page précédente
mais donc cas si je le redirige après la connexion ou l inscription vers la page précédente
il va retomber sur la page lui demandant de se connecter ou de s inscrire

du coup comment je pourrais faire
A voir également:

11 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 4 649
20 juin 2021 à 20:43
Tu pourrais stocker la page où le rediriger dans une variable GET ( dans l'url donc ) ou dans une variable de session...
Sachant que, lorsque tu arrives sur la page de connexion, tu peux récupérer la page précédente sur laquelle il était grâce à la variable
$_SERVER['HTTP_REFERER']


1
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179
Modifié le 20 juin 2021 à 23:58
bonjour jordane
merci pour l aide
donc si je comprends bien je n ai que ce morceau de code a ajouter a ma page de connexion ?
cela me parai trop facile pour être vrai

je viens de faire des essais

sur ma page de connexion lorsque je fais ceci

<?php 
$referer = ($_SERVER['HTTP_REFERER']);
echo $referer ;?> 

j ai bien l url de al page visitée précédemment

mais la structure de mon site est faite de cette façon
on arrive sur la page d accueil
et lorsque on clic sur certains lien on est redirige vers la page protégée
par exemple debutant.php
mais aussi tout que l utilisateur arrive sur ma page de debutant.php il est redirige vers la page de connexion
et donc a ce moment
la variable me retourne en echo l url du server
0
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179
Modifié le 21 juin 2021 à 00:51
après avoir compris le principe je reviens de nouveau ...

j ai crée vite fait une page protégée de cette façon

<?php 
session_start();
  if (isset($_SESSION['user'])) { ?>
                      echo tu es connecte et tu peux tout voir 
        
<?php } 
else { ?>

        tu n es pas connecte je te conseille de te conecter 
        <li><a href="index.php">pour te connecter</a></li>
          
   <?php } ?>`
   


ensuite pour le traitement de la connexion j ai deux pages
la première c est
le formulaire de connexion
je l appelle index.php

et pour le traitement j ai connexion.php

dans la page index.php
j ai écrit ceci afin de m assurer que j avais bien récupérer la bonne variable

<?php 
$referer = ($_SERVER['HTTP_REFERER']);
echo $referer ;?>


ensuite sur ma page de connexion .php

j ai modifie cette partie

header('Location: accueil-peche-perle.php?pseudo='.$_SESSION['pseudo']);


en

header("Location: $referer?pseudo=" . $_SESSION['pseudo']);

et bien entendu
j ai ceci en début de page
$referer = ($_SERVER['HTTP_REFERER']);



lorsque je me connecte sur la page protégée et que je ne suis pas encore connecte
je peux grâce a mon lien me rendre sur la page de index.php
je vérifie et j ai bien en echo la page protégée qui est affichée donc tout va bien

mais lorsque je me connecte je suis redirige vers index.php et non pas vers la page protégée

au début je pensais que cela était du au fait que j avais deux pages pour la connexion
le formulaire et le traitement

j ai rassemble les deux pages ensemble et le résultat est pareil
je suis redirige vers la page index.php qui comporte les deux parties cette fois
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
21 juin 2021 à 12:04
en passant, dans ta page de connexion, pourquoi faire
header("Location: $referer?pseudo=" . $_SESSION['pseudo']);

et pas simplement
header("Location: $referer");


ton explication est très floue.
le formulaire de connexion je l appelle index.php et pour le traitement j ai connexion.php
partage le contenu de tes trois pages, en indiquant chaque fois le nom de la page.
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471 > yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024
21 juin 2021 à 12:35
à la réflexion, je pense que, simplement, tu n'as pas du tout suivi la suggestion de Jordane:
Tu pourrais stocker la page où le rediriger dans une variable de session.
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471 > yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024
21 juin 2021 à 12:48
tu pourrais aussi, lors de la visite refusée à une page protégée, mémoriser l'adresse de cette page dans une variable de session, et rediriger vers cette page après la connexion.
0
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179 > yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024
Modifié le 21 juin 2021 à 13:36
bonjour YG
merci pour la réponse
j ai également suivi le conseil de jordane de passer l url par un get

voici donc comment se présente mon exemple

j ai une page que j appelle coin.php
qui est donc ma page d exemple qui est protégée contre les membres qui ne sont pas inscrit

qui se présente de la façon suivante en procédant comme jordane me le conseille

<?php 
session_start();
  if (isset($_SESSION['user'])) { ?>
                      tu es connecte et tu peux tout voir 
        
<?php } 
else { ?>

     
    <?php    
        
        //debut recherche http visite de la personne
if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on')
    $link = "https";
else
    $link = "http";
 // Here append the common URL characters.
$link .= "://";
  // Append the host(domain name, ip) to the URL.
$link .= $_SERVER['HTTP_HOST'];
 // Append the requested resource location to the URL
$link .= $_SERVER['REQUEST_URI'];
//fin recherche http visite de la personne
        ?>
        <a  href="index.php?link=<?php echo $link;?>">connectes toi</a>
          
   <?php } ?>`


`



la page index.php est le formulaire que l utilisateur doit remplir pour être connecte

le traitement s effectue quand a lui sur la page de connexion.php

donc sur la page de connexion.php je récupère la variable par un GET

sur ma page de connexion j ai ajouter ceci

<?php
session_start(); 
$link = !empty($_GET['link']) ? $_GET['link']: NULL;

echo $link  ;

          
            
         
?>`

et modifier ceci

header('Location: accueil-peche-perle.php?pseudo='.$_SESSION['pseudo']);

en
header("Location $link ?pseudo=" . $_SESSION['pseudo']);



lorsque j arrive sur ma page de index.php
je vois bien dans l url que le transfert de la page coin.php a bien fonctionner
et dans l echo $link aussi
donc le GET a bien fonctionner lui aussi

mais lorsque je me connectes
je suis redirige vers la page connexion.php
on dirait que le header location n effectue rien

alors pour ce qui est de

pseudo='.$_SESSION['pseudo'])

je dois encore regarder a quoi cela sert réellement car j ai une page qui ne fonctionne plus correctement si je l enlève
je dois investiguer
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471 > flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024
21 juin 2021 à 13:33
la page coin.php contient deux liens: lequel est-il utilisé?

je pense que ce serait beaucoup plus simple d'utiliser une variable de session pour sauvegarder le lien, plutôt que de passer via le GET.
0
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179
21 juin 2021 à 01:39
j ai également essaye par get et l url c est pareil
je ne suis pas redirige je reste sur la page de connexion
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179
21 juin 2021 à 16:04
merci YG_be pour l aide
oui les erreurs sont activées dans les 3 pages
je joins les 2 fichiers qui me servent pour la connexion et que je dois encore améliorer
alors voici mon code pour le formulaire index.php

<?php 
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
//$referer = ($_SERVER['HTTP_REFERER']);
//echo $referer ;
?>
<!doctype html>
<html lang="en">
   <head>
      <!-- fin head -->
      <?php include("./include/head.php"); ?>
      <link rel="stylesheet" type="text/css" href="./css/cadre-horizontal.css">
      <!--<META http-EQUIV="Refresh" CONTENT="0; url=https://phil.pecheperle.be/accueil-peche-perle.php">-->
      <!-- debut body -->
      <style>
         .login-form {
         width: 50%;
         margin: 50px auto;
         }
         .login-form form {
         margin-bottom: 15px;
         background: #f7f7f7;
         box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3);
         padding: 10px;
         }
         .login-form h2 {
         margin: 0 0 15px;
         }
         .form-control, .btn {
         min-height: 38px;
         border-radius: 2px;
         }
         .btn {        
         font-size: 15px;
         font-weight: bold;
         }
         @media (min-width: 0px) and (max-width:305px) {
         .login-form{width: 100%;    }
         }
         @media (min-width: 306px) and (max-width:520px) {
         .login-form{width: 80%;    }
         }
         @media (min-width: 503px) and (max-width:700.99px) {
         .login-form{width: 50%;    }
         }
         @media (min-width: 701px) and (max-width:999.99px) {
         .login-form{width: 40%;    }
         }
         @media (min-width: 1000px) and (max-width:1449.99px) {
         .login-form{width: 30%;    }
         }
         @media (min-width: 1450px) and (max-width:5000px) {
         .login-form{width: 20%;    }
         }
       </style>
       <title>peche perle</title>
   </head>
   <body style="background-color:#87CEEB;">
      <div class="container">
         <title>peche perle</title>
         <div class="container" style=" max-width: 100%;margin:auto;">
            <!-- debut banniere -->
            <?php include("./include/baniere-peche-perle.php"); ?>
            <!-- fin banniere -->
            <!-- debut menu -->
            <?php include("./include/menu.php"); ?>
            <!-- fin menu -->
         </div>
         <div class="login-form">
            <?php
               if (isset($_GET['login_err']))
               {
                   $err = htmlspecialchars($_GET['login_err']);
                   switch ($err)
                   {
                       case 'password':
               ?>
            <div class="alert alert-danger">
               <strong>Erreur</strong> Mot de passe incorrect
            </div>
            <?php
               break;
               case 'pseudo':
               ?>
            <div class="alert alert-danger">
               <strong>Erreur</strong> Pseudo incorrect
            </div>
            <?php
               break;
               case 'already':
               ?>
            <div class="alert alert-danger">
               <strong>Erreur</strong> Compte non existant 
            </div>
            <?php
               break;
               }
               }
               ?>
            <form action="connexion.php" method="post">
               <div class="card text-center">
                  <div class="card-header">
                     <h2 >Connexion</h2>
                  </div>
                  <div class="card-body">
                     <p class="card-text">
                        <input type="text" name="pseudo" class="form-control" placeholder="pseudo" required="required" autocomplete="off">
                     </p>
                     <p class="card-text">
                        <input type="password" name="password" class="form-control" placeholder="Mot de passe" required="required" autocomplete="off">
                     </p>
                     <p class="card-text">
                        <button type="submit" class="btn btn-primary btn-block">Connexion</button>
                     </p>
                  </div>
               </div>
               <p class="card-text">
                  <a href="inscription.php">Créez un compte 
                  </a>
               </p>
               <p class="card-text">
                  <a href="mot-passe-oublie.php">Mot de passe oublié</a>
               </p>
            </form>
         </div>
         <div class="container" style=" max-width: 100%;margin:auto;">
            <!-- debut pied de page-->
            <?php include("./include/pied-de-page.php"); ?>
            <?php include("./include/footer.php"); ?>
         </div>
      </div>
   </body>
   <!-- fin du body-->
</html>


voici le code pour la connexion
donc le fichier connexion.php

<?php
session_start(); 
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
$link = !empty($_GET['link']) ? $_GET['link']: NULL;
//$referer = ($_SERVER['HTTP_REFERER']);
//echo $referer ;
require_once 'config.php';
if (!empty($_POST['pseudo']) && !empty($_POST['password']))
{
    
    $pseudo= !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
    $password= !empty($_POST['password']) ? $_POST['password'] : NULL;
    
   // $pseudo = htmlspecialchars($_POST['pseudo']);
    //$password = htmlspecialchars($_POST['password']);
    $check = $bdd->prepare('SELECT pseudo, email,id, password FROM utilisateurs WHERE pseudo = ?');
    $check->execute(array(
        $pseudo
    ));
    $data = $check->fetch();
    $row = $check->rowCount();
    if ($row == 1)
    {
        if (password_verify($password, $data['password']))
        {
            $_SESSION['user'] = array(
                'id' => $data['id'],
                'pseudo' => $data['pseudo'],
                'email' => $data['email']
            );
            $_SESSION['pseudo'] = $data['pseudo'];
            $_SESSION['email'] = $data['email'];
            //header("Location $referer ?pseudo=" . $_SESSION['pseudo']);
           header("Location $link ?pseudo=" . $_SESSION['pseudo']);
            die();
        }
        else
        {
            header('Location: index.php?login_err=password');
            die();
        }
    }
    else
    {
        header('Location: index.php?login_err=already');
        die();
    }
}
?>`



voici ce que je vois quand j arrive sur ma feuille index.php qui est le formulaire de connexion

https://pecher.000webhostapp.com/peche/index.php?link=https://pecher.000webhostapp.com/peche/coin.php



et voici le fichier test coin.php


<?php 
session_start();
  if (isset($_SESSION['user'])) { ?>
                      tu es connecte et tu peux tout voir 
        
<?php } 
else { ?>

     
    <?php    
        
        //debut recherche http visite de la personne
if(isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on')
    $link = "https";
else
    $link = "http";
 // Here append the common URL characters.
$link .= "://";
  // Append the host(domain name, ip) to the URL.
$link .= $_SERVER['HTTP_HOST'];
 // Append the requested resource location to the URL
$link .= $_SERVER['REQUEST_URI'];
//fin recherche http visite de la personne
        ?>
        <a  href="index.php?link=<?php echo $link;?>">connectes toi</a>
          
   <?php } ?>`


je pense que ce serait beaucoup plus simple d'utiliser une variable de session pour sauvegarder le lien, plutôt que de passer via le GET.

et comment je pourrais mettre le lien dans une variable de session ?
de cette façon

$link = ($_SERVER['HTTP_REFERER']);
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
21 juin 2021 à 16:14
je vois que, comme je le suspectais, le lien n'est pas passé à la page connexion.php.

comment utiliser une variable de session pour sauvegarder le lien:
$_SESSION['link'] = $_SERVER['REQUEST_URI'];

(dans coin.php, bien sûr)
0
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179 > yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024
21 juin 2021 à 16:34
merci pour la reponse yg_be
mais sur la page de connexion.php je dois changer quelque chose pour la récupération et l utilisation de cette variable ?
0
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179 > flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024
21 juin 2021 à 16:48
j ai donc modifier coin.php de cette façon

   <?php    
$_SESSION['link'] = $_SERVER['REQUEST_URI'];
$link=$_SESSION['link'];
echo $link ;
        ?>
        <a  href="index.php?link=<?php echo $link;?>">pour te connecter</a>


sur ma page de index.php
j ai cette fois ceci

https://pecher.000webhostapp.com/peche/index.php?link=/peche/coin.php

donc cela veux dire que j ai bien transféré la variable sur ma page index.php

mais le résultat est pareil après connexion je reste bloque sur la page connexion.php
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471 > flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024
21 juin 2021 à 17:05
as-tu modifié connexion.php afin d'utiliser la variable de session qui a été sauvegardée dans coin.php?

dans coin.php, tu peux supprimer toute utilisation de la variable
$link
.
0
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179
21 juin 2021 à 17:10
merci pour l aide yg_be

c est justement cela le problème comment utiliser cette variable de cession ?

je dois peut être juste faire ceci

header("Location $_SESSION['link']?pseudo=" . $_SESSION['pseudo']);
0
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179
21 juin 2021 à 17:26
ah ben voila cela fonctionne de cette manière


          header ('location: '.$_SESSION['link']);


mais comment le faire fonctionner avec mon morceau de code d origine

header("Location '.$_SESSION['link'] ?pseudo=" . $_SESSION['pseudo']);
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
21 juin 2021 à 22:59
je ne pense pas que ce soit une bonne idée d'ainsi passer le pseudo via l'url, c'est vraiment une invitation au piratage.
0
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179 > yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024
21 juin 2021 à 23:25
ok très bien merci pour ton aide yg_be
je vais regarder ou j avais encore besoin de ce genre de chose sur mon site
et faire autrement
0
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179
21 juin 2021 à 19:33
donc sur chaque page protégée je dois juste mettre ce code alors ?

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




a présent imaginons que la personne arrive sur la page coin.php mais ne sait pas voir le contenu car il n est pas enregistré , il décide donc de cliquer sur l enregistrement(j ajoute un nouveau lien bien entendu sur coin.php )

après le traitement de l inscription comment le rediriger vers la dernière page qu'il a visite ?
de cette façon

 <a  href=" <?php  $_SESSION['link'];  ?>"> pour revenir sur la dernière page vue avant l inscription </a>
0
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179
Modifié le 21 juin 2021 à 20:27
alors pour ceux que cela intéresse je pense avoir trouve

   //$link=$_SESSION['link'];
$link= !empty($_SESSION['link']) ? $_SESSION['link'] : NULL;
   echo $link;
               ?>
                   
                        <a href="<?php echo $link; ?>" > vers la derniere page avant l inscription </a>
0
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179
Modifié le 21 juin 2021 à 21:47
j ai juste un problème lorsque la personne ouvre la page de connexion directement dans le navigateur
j ai un message d erreur indiquant qu il ne trouve pas le lien

voila c est réglé j ai juste vérifier l état de la variable
si vide je le dirige sur l accueil
si occupée il sera redirige vers la dernière page
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
21 juin 2021 à 22:11
je pense que tu as trouvé les bonnes réponses à tes diverses questions.
0
flexi2202 Messages postés 3784 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 30 mars 2024 179
21 juin 2021 à 22:19
oui un tout tres grand merci yg_be

il ne reste qu une seule que je ne parviens pas a résoudre
concernant mon poste 17
0