Redirection et session

Signaler
Messages postés
23
Date d'inscription
mercredi 12 avril 2006
Statut
Membre
Dernière intervention
14 décembre 2012
-
Messages postés
23
Date d'inscription
mercredi 12 avril 2006
Statut
Membre
Dernière intervention
14 décembre 2012
-
Bonjour,
je bloque sur un problème de session.
J'essai de créer une zone membre à l'aide des sessions. Pour l'instant tout va bien et j'ai donc un lien qui permet de s'enregistrer et d'accéder à la zone membre.
Par contre j'aimerai sécuriser des pages (autre que la zone membre) sans que l'utilisateurs ai besoin de passer par la zone membre.
En gros il clique sur le lien, un message lui dit qu'il faut être enregisré pour accéder à la page, il s'enregistre et accède à la page.
Voilà le code de ma page connexion qui permet de s'enregistrer:

      ----

      <form name= "form1" method="post" action="verifinscription.php">
      <table width="89%" height="151"  border="2">
        ----

         ,

            Email
</td>
       
        ----

                      <label>
            " size="20">
            </label>
         ,
       
        ----

          Password,
       
        ----

                      " size="20">
         ,
       
        ----

          <label>           
            
           

            
           

            </label>
             

             
Inscription&amp;nbsp;
                <label>
              <?php
              @include"config.php";
echo "pass perdu";
           
           
            ?>
             

                </label>
         

             ,
       
     

      </form></td>
    </tr>
</table>


Et voilà verifinscription
<?php
$db  = mysql_connect($serveur, $login, $password); 
mysql_select_db($base,$db);
$pseudo= htmlspecialchars($HTTP_POST_VARS["pseudo"]); 
 $email=$HTTP_POST_VARS["email"]; 
$passe=htmlspecialchars($HTTP_POST_VARS["passe"]);
$aujourdhui = date("d/m/Y");
$sql = "INSERT INTO $table (pseudo,passe,email,nom,prenom,age,sexe,pays,departement ,ville ,cdp,adresse,telephone,portable,fax,site,mot,image,date ,ok,val) VALUES ('$pseudo', '$passe', '$email','$nom','$prenom','$age','$sexe','$pays','$departement','$ville','$cdp','$adresse','$telephone','$portable','$fax','$site','$mot','avatar/100.gif','$aujourdhui','$ok','$val')";
header("Location: fichemembre.php?");exit;
}
if ($action == "connect")
{
session_start();    session_register("email");     session_register("passe");
//récuperation des champs du formulaire
$email=$HTTP_POST_VARS["email"];    $passe=$HTTP_POST_VARS["passe"];
$db = mysql_connect($serveur, $login, $password); 
mysql_select_db($base,$db);
 
$sql="select * from $table where passe like '$passe' and email like '$email'";
$result= mysql_query($sql);
$nb=mysql_num_rows($result);
$rs=mysql_fetch_array($result);if($email ""||$passe ""){echo" <center>Le champs  email et password  sont obligatoires merci !</center>"; exit; }
if ($nb == 0)
{echo"<center> l'email ou le mot de passe n'est pas connu 

retour</center>";exit;

 }
if ($nb ==1)
{$message="salut
 $email
 vous êtes bien identifié";
setcookie("cokmail",$email,time()+365*24*60*60) ;
//mise en session de l'email et du passe
$email_session=$email;   $code_session=$rs["code"];}
 include("config.php");

?


Voilà, si quelqu'un pouvait m'aider ce serait cool, merci d'avance

13 réponses

Messages postés
96
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
24 avril 2007
1
Bonjour,

Si tu veux protéger des pages pour que les personnes qui ne sont pas enregistrées soient redirigées vers ton formulaire de connexion, tu as juste à insérer ce petit bout de code à la première ligne de chacune des pages que tu veux protéger :

"if (!isset($_SESSION['nom_de_ta_variable'])) { header('Location: http://tonsite.com/tonformulaire.php'); }"

c'est tout :)

bye
Messages postés
23
Date d'inscription
mercredi 12 avril 2006
Statut
Membre
Dernière intervention
14 décembre 2012

super, merci,
et maintenan comment faire lorsqu'il a été redirigé sur la page "tonformulaire.php" (mon formulaire est là haut ;), s'enregistre et clic sur ok ,
ne soit pas redirigé vers la zone membre mais vers le lien sur lequel il a cliqué.
Je récapitule:
1er lien= zone membre -> clic="monformulaire.php" puis fichemembre (ca c ok)
2ème lien = page 2 -> clic --> page protégée -> redirection monformulaire.php ->enregistrement (jusqu'ici ca va)-> redirection page 2 (là j'arrive pas!)
3ème lien = page 3 -> clic --> page protégée -> redirection monformulaire.php ->enregistrement -> redirection page 3
Voilà j'ai essayé d'être clair mais c pas facile,
merci d'avance
Messages postés
96
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
24 avril 2007
1
Tu dois pouvoir le faire avec le REFERER.
Dans ton fichier formulaire.php tu déclares une variable : $var = $_SERVER['HTTP_REFERER'];
Cette fonction permet de te donner l'adresse de la dernière page.
Et au moment où il valide le formulaire, si c'est ok, tu le rediriges sur le REFERER :)

Si tu comprends pas trop, je te ferais un truc quand je rentrerais du taff.

bye
Messages postés
23
Date d'inscription
mercredi 12 avril 2006
Statut
Membre
Dernière intervention
14 décembre 2012

ok, je déclare la variable
$var = $_SERVER['HTTP_REFERER'];
en haut du script formulaire php
puis à la place de
header("Location: fichemembre.php?");exit;
}

je met
header("Location: $_SERVER['HTTP_REFERER'];");exit;
}


Mais ca marche pas , l'erreur renvoyé est Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /mnt/109/free.fr/a/b/leschagnasses/connect.php on line 167
la ligne 167 étant justement celle avec header("Location....
Messages postés
96
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
24 avril 2007
1
<code>header("Location: $_SERVER['HTTP_REFERER']");exit;

Y a pas de ";" apres REFERER :)
Messages postés
23
Date d'inscription
mercredi 12 avril 2006
Statut
Membre
Dernière intervention
14 décembre 2012

voilà, j ai donc changé:
header("Location: $_SERVER['HTTP_REFERER']");exit;
}
et il me renvoi tjrs la même erreur même ligne?
Merci en tous cas c cool de m'aider
Messages postés
23
Date d'inscription
mercredi 12 avril 2006
Statut
Membre
Dernière intervention
14 décembre 2012

Salut, après bonne galère j'ai réussis (enfin presque)
Il y avait une erreur de syntaxe, voici par quoi j'ai remplacé:
header("Location: {$_SERVER['HTTP_REFERER']}");
Mais voilà cette fonction permet de retourner la page d'ou vien le visiteur mais pas celle ou il voulait aller:
je m'explique
le visiteur est sur la page A; il clique sur un lien pour aller sur la page B, cette dernière est protégée, il est donc redirigé
vers le formulaire d'inscription. Il remplis les champs et quand il clique sur ok il accède à la page B.
J'ai plein de page à protéger, donc il me faut une fonction qui récupère l'url de la page demandée et la renvoie une fois
le formulaire correctement remplis. J'éspère avoir été clair,
Merci d'avance
++
Messages postés
96
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
24 avril 2007
1
Bonjour,

A ma connaissance le seul moyen que tu as pour cela, c'est d'utiliser le REFERER...
Quand ton visiteur est sur la page A il veut aller sur la page B, ça le renvoie sur le formulaire et donc le REFERER est égal à la page B, la dessus un on est d'accord.
Ce que tu peux faire c'est quand il va sur la page B, vu qu'il n'est pas connecté, il va être renvoyé au formulaire, juste avant de le rediriger, tu peux déclarer une variable session : $_SESSION['referer'] (par exemple) = $_SERVER['HTTP_REFERER'];
Ce qui aura comme valeur la page A.
Puis dans ton formulaire, lorsqu'il est validé, tu le rediriges avec cette variable.

Tiens moi au courant :)

bye
Messages postés
23
Date d'inscription
mercredi 12 avril 2006
Statut
Membre
Dernière intervention
14 décembre 2012

Donc voilà:
sur ma page B (protégée) je met tout en haut:
<?php
$_SESSION['referer'] = $_SERVER['HTTP_REFERER'];
if (!isset($_SESSION['email'])) { header('Location: monformulaire.php'); }
?>

Sur ma page "monformulaire":
header("Location: {$_SERVER['HTTP_REFERER']}");
exit;}
mais ca me renvoi nul part!!
j'ai essayé de remplacer par
header("Location: fichemembre.php?");exit;
}
et la ca marche j'atteint bien fichemembre.php
Messages postés
96
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
24 avril 2007
1
Nan tout est bon sauf que sur ton formulaire c'est : header("Location: {$_SESSION['referer']}"); exit;

J'ai testé chez moi en local, et ça fonctionne bien. :)
Messages postés
23
Date d'inscription
mercredi 12 avril 2006
Statut
Membre
Dernière intervention
14 décembre 2012

j ai tout bien placé, remplacé mon erreur par le {$_SESSION['referer']}"); exit;
rine à faire une fois enregistré le formulaire me renvoi vers la page A.
Alors que j'ai bien sur l'en tête de ma page B (celle à atteindre)
<?php
$_SESSION['referer'] = $_SERVER['HTTP_REFERER'];
if (!isset($_SESSION['email'])) { header('Location: http://leschagnasses.free.fr/connect.php'); }
?>

j comprends pas!
Bon j'vous met le code de ma page formulaire au cas ou, y'a peut être une erreur dans mon formulaire??

<?php
$db = mysql_connect($serveur, $login, $password);
mysql_select_db($base,$db);
//récuperation des champs de l'inscription
$pseudo=htmlspecialchars($HTTP_POST_VARS["pseudo"]);
 $email=$HTTP_POST_VARS["email"];
$passe=htmlspecialchars($HTTP_POST_VARS["passe"]);
$nom=htmlspecialchars($HTTP_POST_VARS["nom"]);
 $prenom=htmlspecialchars($HTTP_POST_VARS["prenom"]);
 $age=htmlspecialchars($HTTP_POST_VARS["age"]);
$sexe=$HTTP_POST_VARS["sexe"];
$pays=htmlspecialchars($HTTP_POST_VARS["pays"]);
$Département=$HTTP_POST_VARS["Département"];
$ville=htmlspecialchars($HTTP_POST_VARS["ville"]);
$cdp=htmlspecialchars($HTTP_POST_VARS["cdp"]);
$adresse=htmlspecialchars($HTTP_POST_VARS["adresse"]);
$telephone=htmlspecialchars($HTTP_POST_VARS["telephone"]);
$portable=htmlspecialchars($HTTP_POST_VARS["portable"]);
$fax=htmlspecialchars($HTTP_POST_VARS["fax"]);
$site=$HTTP_POST_VARS["site"]; 
$mot=htmlspecialchars($HTTP_POST_VARS["mot"]);

//je supprime les espaces vides
$pseudo=trim($pseudo);
$email=trim($email);
$passe=trim($passe);
$nom=trim($nom);
$prenom=trim($prenom);
$age=trim($age);
$sexe=trim($sexe);
$pays=trim($pays);
$Département=trim($Département);
$ville=trim($ville);
$cdp=trim($cdp);
$adresse=trim($adresse);
$telephone=trim($telephone);
$portable=trim($portable);
$fax=trim($fax);
$site=trim($site);
$mot=trim($mot);

if ($action == "connect")
{
session_start();    session_register("email");     session_register("passe");
//récuperation des champs du formulaire
$email=$HTTP_POST_VARS["email"];    $passe=$HTTP_POST_VARS["passe"];
$db = mysql_connect($serveur, $login, $password);
mysql_select_db($base,$db);
 
$sql="select * from $table where passe like '$passe' and email like '$email'";
$result= mysql_query($sql);
$nb=mysql_num_rows($result);
$rs=mysql_fetch_array($result);if($email ""||$passe ""){echo" <center>Le champs email et password sont obligatoires merci !</center>"; exit; }
if ($nb == 0)
{echo"<center> l'email ou le mot de passe n'est pas connu

retour</center>";exit;

 }
if ($nb ==1)
{$message="salut
$email
vous êtes bien identifié vous allez être redirigé vers votre espace membre";
setcookie("cokmail",$email,time()+365*24*60*60) ;
//mise en session de l'email et du passe
$email_session=$email;   $code_session=$rs["code"];}
header("Location: {$_SESSION['referer']}"); exit;
}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

      ----

      <form name="form1" method="post" action="connect.php">
      <table width="89%" height="151"  border="2">
        ----

         ,

            Email
</td>
       
        ----

                      <label>
            " size="20">
            </label>
         ,
       
        ----

          Password,
       
        ----

                      " size="20">
         ,
       
        ----

          <label>           
           
           

           
           

            </label>
             

             
Inscription&nbsp;
                <label>
              <?php
              @include"config.php";
echo "pass perdu";
           
           
            ?>
             

                </label>
         

             ,
       
     

      </form></td>
    </tr>
</table>

</html><? ?>
Messages postés
96
Date d'inscription
lundi 24 novembre 2003
Statut
Membre
Dernière intervention
24 avril 2007
1
Bonjour,

En relisant, je me suis aperçu que je n'avais pas bien compris quelque chose...

Si vous mettiez dans la page de votre formulaire :

if ($nb==1)
{$message="salut

$email
vous êtes bien identifié vous allez être redirigé vers
votre espace membre";
setcookie("cokmail",$email,time()+365*24*60*60) ;
//mise en session de l'email et du passe
$email_session=$email;   $code_session=$rs["code"];}
header("Location: {$_SERVER['HTTP_REFERER']}"); exit;
}

Cela ne marcherait il pas ?

Lorsque l'utilisateur est sur la page A et qu'il clic sur un lien pour la page B, il se fait redirigé à partir de la page B vers la page C (formulaire). Il se connecte puis à l'aide du REFERER, il se fait rediriger vers la dernière page connu (à savoir la page B).

Est ce cela ?
Messages postés
23
Date d'inscription
mercredi 12 avril 2006
Statut
Membre
Dernière intervention
14 décembre 2012

Désolé pour l'absence!
J'ai testé avec header("Location: {$_SERVER['HTTP_REFERER']}"); exit; au lieu de header("Location: {$_SESSION['referer']}"); exit;

Je récapitule car ca devient fouilli!
Sur ma page protégée je déclare en en tête
<?php
$_SESSION['referer'] = $_SERVER['HTTP_REFERER'];
if (!isset($_SESSION['email'])) { header('Location: http://leschagnasses.free.fr/connect.php'); }
?>
Le code de connect (la page formulaire) est si dessus est même quand je remplace
header("Location: {$_SESSION['referer']}"); exit; par
header("Location: {$_SERVER['HTTP_REFERER']}"); exit;
ca marche pas!

Voilà, peut être y 'a t'il une erreur dans "<form name="form1" method="post" action="connect.php">" je regarde avec PHP_SELF mais ca n'a pas l'air de fonctionner non plus!
Voilà, si vous avez besoin de plus d'info pour m'aider n'hésitez pas!
Merci d'avance
++