IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Boucle de redirection header Location


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 163
    Points : 70
    Points
    70
    Par défaut Boucle de redirection header Location
    Bonjour, voici mon pb, je suis sur une page nomée => xxx.php, sécurisée par un mot de pass qui envoie un cookie libérant l'accès au script. Le mot de pass a été entré, il est correct, tout va bien, si je place un lien classique vers une autre page sécurisée yyy.php qui require xxx.php du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="yyy.php">mon lien</a>
    ma page yyy.php apparaît.
    Par contre je ne désir pas passer par un lien et faire une redirection de type "header location" j'obtiens une boucle sans fin du type (sous ff) :
    'Boucle de redirection
    Firefox a détecté que le serveur redirige la demande pour cette adresse d'une manière qui n'aboutira pas.
    Le navigateur a arrêté d'attendre une réponse du site. Le site crée une redirection de telle sorte que la requête ne peut jamais aboutir.
    * Avez-vous désactivé ou bloqué les cookies nécessaires pour ce site ?
    * NOTE : Si le problème n'est pas résolu en acceptant les cookies de ce site, il s'agit probablement d'un problème de configuration du serveur et non de votre ordinateur.'
    ===> j' ai employé à la première ligne de mon fichier xxx.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?
    header('Status: 301 Moved Permanently', false, 301);
    header('Location: yyy.php');
    exit();
    ?>
    Le plus rageant est que dans ma barre d'adresse l'adresse passe de http://mon_site/xxx.php à http://mon_site/yyy.php
    donc l'évènement se produit bien, l'adresse est correcte, mais ma page n'apparaît pas et j'ai le message de Boucle de redirection...
    Avez vous une solution pour contourner ce problème ? merci par avance à tous les courageux qui comme moi ne sont pas en vacance (lol)

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    hmmm au début de ton post tu dis
    vers une autre page sécurisée yyy.php qui require xxx.php
    donc vala comment je le comprends :

    1] xxx.php fait la vérif
    2] xxx.php ACCEPTE la vérif
    3] xxx.php redirige vers yyy.php
    4] yyy.php est appellée
    5] yyy.php require xxx.php
    6] xxx.php est donc exécutée
    7] et rebelotte à l'étape 1, et ceci en boucle

  3. #3
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 163
    Points : 70
    Points
    70
    Par défaut
    Bonjour darkstar123456, je crois que tu as parfaitement cerné la structure. As tu une solution ou un conseil à me donner pour éviter cette boucle infernale ?
    Comme je le dis,
    l'évènement se produit bien, l'adresse est correcte, mais ma page n'apparaît pas et j'ai le message de Boucle de redirection...
    Par avance merci, (car je n'ai pas encore résolu ce pb qui me bloque).

  4. #4
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    et bieeen... en toute logique, ce qui a été vérifié ne doit plus l'être...

    donc si xxx.php a tout vérifié et qu'il envoie un header("Location: yyy.php"); alors xxx.php n'a pas besoin d'être inclus dans yyy.php

  5. #5
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 163
    Points : 70
    Points
    70
    Par défaut
    Ok, mais le prob c'est que si yyy.php contient par exemple (comme c'est le cas) un formulaire voué à intervenir dans le css, il suffirait à n'importe qui de tapper l'adresse : yyy.php et de mettre en toute tranquilité le "bazar" dans le css, avec les concéquences que tu peux imaginer.
    Si la page est protégée, même succintement par xxx.php, n'importe qui ne peut pas entrer dans la page permettant d'accéder au css sans le pass.
    Ok, je pourrais faire une page avec un nom incroyable à la place de yyy.php pour éviter que n'importe qui trouve l'adresse, mais comme cette page sera un document "type" mis à disposition de plusieurs personnes, cette solution serait difficile à gérer... (j'espère que tu me suis, lol, pas facil à expliquer comme ça...)

  6. #6
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    j'ai +/- compris où tu veux en venir... mais tu ne peux pas empêcher les gens de mettre n'importe quoi ^^

    C'est à toi de vérifier que ce qu'on te donne est correct...

    pour se faire tu peux utiliser plusieurs fonction :

    is_int(), is_array(), is_string(), in_array(), isset(), empty(), preg_match(), etc


    de plus, peut-être dans ton cas tu en as besoin, mais sinon tu peux p-e tout faire dans un seul fichier... pourrais-tu lier tes 2 fichiers à ta prochaine réponse ?

  7. #7
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 163
    Points : 70
    Points
    70
    Par défaut
    Code page xxx.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <?
    // si le visiteur a tapé "toto" dans le formulaire
    // on met "ok" dans le cookie
    if($_POST["user"]=="identifiant"
    and $_POST["pass"]=="mot_de_pass") {
       setcookie("passe2","ok");
       Header("Location: ".$_SERVER["PHP_SELF"]);
    // sinon si le lien contient ?pass=no
    // on vide le cookie
    } elseif(@$_GET["user"]=="no"
    and @$_GET["pass"]=="no") {
       setcookie("passe2");
       Header("Location: ".$_SERVER["PHP_SELF"]);
    }
    // là on lit le cookie
    $isOK = (@$_COOKIE["passe2"]!="");
    // si non vide >> affiche le menu
    if($isOK) { ?>
     
    <? // si vide >> affiche le formulaire
    } else { ?>
       <form method="post" action="<?$PHP_SELF;?>">
        <label>Nom d utilisateur : <input type="text" name="user" /></label><br />
        <label>Mot de passe : <input type="password" crypt_password name="pass" /></label><br /><br />
     
        <input type="submit" value="Envoyer" />
        <input type="reset" value="Rétablir" />
    </form>
    <?php
    function crypt_password($texte) { 
       $s=""; 
       for ($i=0;$i<strlen($texte);$i++) { 
         $s.="&#".ord($texte{$i}).";"; 
       } 
       return $s; 
    } 
    // FIN du Filtre crypt_form
    ?>
    <? } ?>
    <br /><br />Retour à <a href="../index.php">Accueil publique</a><br /><br />
    page yyy.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    <?php /* Date de création: 13/07/2009 */ ?>
    <? include("xxx.php");
    if($isOK) { ?>
    <form action="<?$PHP_SELF;?>" method="post">
    <textarea style="width:800px; height:600px"; name="commentaire">
     
    <?php
    echo '';
    ?>
    <?php
    include('../style.css'); 
    ?>	
    <?php
    $ouvre=fopen("../style.css","a+");
    while (!feof ($ouvre))
    {
    $lecture = fgets($ouvre, 4096);
    $donnee=explode("*",$lecture);
    $combien=count($donnee)-1 ;
    echo "";
    for ($i=0;$i<$combien;$i++)
    {
    // suppression des données
    // on supprime la donnée si elle contient ""
    if (ereg(".",$donnee[$i]))
    {
    $donnee[$i]=$donnee[$i]="";
    }
    // stockage temporaire des données si donnée non nulle
    if ($donnee[$i]!="")
    {
    $liste_modif.=$donnee[$i]."*";
    }
    }
    }
    fclose($ouvre);
    $ouvre=fopen("../style.css","w+");
    fwrite($ouvre,$liste_modif);
    fclose($ouvre);
    ?>
    <br/>
    <br/>
    </textarea>
    <input type="submit" value="Ecrire">
    </form><br/>
     
    <?php
    /* si register_globals off (à partir de PHP 4.3)*/
    $commentaire = $_POST['commentaire']; 
     
    if ($commentaire!="")
    	{
    $ouvre=fopen("../style.css","a+"); // ouverture en lecture ( a)
    fwrite($ouvre,$commentaire);    // écriture fichier
    fclose($ouvre);			// fermeture fichier
    echo "commentaire   : ".$_POST['f_commentaire']."<br/>";
    }
    ?>	
    <br/>
    <font color="#FF0000"><b><blink>ATTENTION</blink></b></font>, quoi que vous soyez venu faire sur cette page, veuillez d abord cliquer sur "Ecrire" !<br/>
    sous peine de perdre vos données !
    <br/>
    <a href="../index.php">===Voir ma page>>></a><br/><br/>
    <br/>
    <font color="#009900">Voici donc ici la réplique de votre page !</font><br /><table summary="" border="2" width='600' style="height: 600px;">
    	<tr>
    		<td style="vertical-align:top;">
    <?php
    include("../style.css"); 
    ?>
    </td>
    	</tr>
    </table>
    <br/>
    <?php } ?>
    c'est au début de la page xxx.php que j'avais placé ma redirection vers yyy.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?
    header('Status: 301 Moved Permanently', false, 301);
    header('Location: yyy.php');
    exit();
    ?>

  8. #8
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 163
    Points : 70
    Points
    70
    Par défaut
    (ps : possible qu'il y ai une petite erreur de nomination de fichier sur les codes donnés, j'étais en train de travailler dessus)... rien de grave...(dans ce cas, me faire signe)

  9. #9
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    hmmm en fait, ce que tu souhaites faire c'est une protection !!!!! genre administration !!!

    bon en fait, j'ai fait un script ce matin en 5 minutes pour répondre à un post ^^ il utilise les Sessions (bien plus facile à gérer ) mais si tu souhaites l'adapter avec des Cookies, ça ne sera pas compliqué et tu auras déjà la structure

    PS : N'oublie pas que contrairement à une Session, un Cookie n'est pas accessible directement après sa création et donc qu'un refresh est necessaire avant toute vérification de son existence

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <?php
    session_start();
    if (isset($_POST['action']) && $_POST['action'] == "auth" && empty($_SESSION['login'])) {
    	$errors = 0;
    	/* vérification du login et du pass
    	...
    	*/
    	if (errors === 0) {
    		$_SESSION['login'] = $_POST['login'];
    	}
    }
    if (!isset($_SESSION['login']) || empty($_SESSION['login'])) {
    	// La session n'existe pas !
    	?>
    	<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    		<div>
    			<label for="login">Login : </label>
    			<input type="text" name="login" value="" />
    		</div>
    		<div>
    			<label for="pwd">Login : </label>
    			<input type="text" name="pwd" value="" />
    		</div>
    		<div>
    			<input type="hidden" name="action" value="auth" />
    			<input type="subbmit" value="S'authentifier" />
    		</div>
    	</form>
    	<?php
    	exit;
    }
    ?>
    Citation Envoyé par de moi meme ^^
    sinon vala un ptit script fait en 5 minutes pour les $_SESSION...

    y'a qu'à l'insérer en haut de toutes tes pages de l'admin, en gros tu te fais une page "auth.php" par exemple, que tu inclus dans chaque page...

    ATTENTION néanmoins ! si tu passes par une page qui ne renouvelle pas la session (pas de session_start()) elle sera perdue !
    PS : oui c'est pas bien je n'ai pas testé mon script... mais théoriquement, il devrait fonctionner ^^
    waaaah je m'auto-quote ^^

    enfin vala, a peu de chose près, tu verras que nous avons un code très proche

    l'astuce dans ce cas-ci est d'avoir ce petit fichier qui gère tout, et si tout vas bien, il continue l'affichage du reste de la page, sinon il affiche un formulaire et arrête tout affichage après... ce qui permet de ne jamais faire de header("Location") (sauf si t'utilise un Cookie justement )
    PS : inscrire un mot de passe dans un Cookie cay pas bien
    PS 2 : je te conseille vachement les Sessions

  10. #10
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 163
    Points : 70
    Points
    70
    Par défaut
    Oki, un grand merci pour tes réponses, je reste tout de même un peu frustré, car même si j'arrive tout de même à écrire des choses assez complexes, mes redirections ne fonctionnent jamais (grrr ) apparemment, là c'est à cause du cookie, mais même en réactualisant la page, le header Loc. ne fonctionne pas.
    Je reste tout de même avec mon erreur, mais sur une nouvelle piste.
    Donc merci ! et à +++, (ps : je laisse passer un peu de temps avant de cocher "résolu" au cas où tu aurais quelque chose à ajouter sur mon erreur :
    'Boucle de redirection' pur m'orienter pour mes futurs redirections, lol
    ... )
    A+++

  11. #11
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 838
    Points
    2 838
    Par défaut
    Citation Envoyé par midnnight Voir le message
    Oki, un grand merci pour tes réponses, je reste tout de même un peu frustré, car même si j'arrive tout de même à écrire des choses assez complexes, mes redirections ne fonctionnent jamais (grrr ) apparemment, là c'est à cause du cookie, mais même en réactualisant la page, le header Loc. ne fonctionne pas.
    Je reste tout de même avec mon erreur, mais sur une nouvelle piste.
    Donc merci ! et à +++, (ps : je laisse passer un peu de temps avant de cocher "résolu" au cas où tu aurais quelque chose à ajouter sur mon erreur :
    'Boucle de redirection' pur m'orienter pour mes futurs redirections, lol
    ... )
    A+++
    Concernant tes problèmes de redirection... déjà perso le status 301 j'sais pu trop ce que c'est, et pour une bête redirection, je te conseil de te limiter au seul header("Location") ^^

    De plus, avant d'appliquer un header(location), je te conseille vivement de mettre une condition (soit pour le lancer, soit pour le stoper) mais sinon forcément, ça tourne en rond ^^

  12. #12
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    163
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 163
    Points : 70
    Points
    70
    Par défaut
    C'est noté, a+++ !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 5.3] Redirection header location
    Par hendrix67 dans le forum Langage
    Réponses: 8
    Dernier message: 22/03/2010, 10h35
  2. redirection header("Location :")
    Par Angelik dans le forum Langage
    Réponses: 2
    Dernier message: 02/06/2008, 03h43
  3. Réponses: 3
    Dernier message: 28/01/2008, 22h18
  4. Erreur de redirection (header("location /page.php");)
    Par pierrot10 dans le forum Langage
    Réponses: 6
    Dernier message: 16/08/2006, 08h43
  5. Problème redirection header ('location:
    Par Jiraiya42 dans le forum Langage
    Réponses: 1
    Dernier message: 24/06/2006, 17h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo