Redirection header() en fonction de la valeur d'un cookie

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par Meeuuuhhh, 11 Juin 2008.

  1. Meeuuuhhh
    Meeuuuhhh WRInaute passionné
    Inscrit:
    8 Janvier 2007
    Messages:
    1 498
    J'aime reçus:
    0
    Bonjour,

    Bon c'est la suite du topic sur les cookies et le référencement, mais là c'est plus technique alors j'ouvre un nouveau thread dans la section approprié :


    Voilà, j'ai donc un disclaimer sur un site.
    Ce disclaimer fonctionne avec un cookie PHP, testé sur toutes les pages. S'il n'est pas initialisé ou si sa valeur est "non", le visiteur est redirigé vers le disclaimer de index.php .
    Ca, ça fonctionne.

    Maintenant, je veux améliorer le système : si le gars arrive via un lien profond, il est redirigé vers l'accueil pour qu'il certifie son âge. Et ensuite, le header le renvoit sur la page par laquelle il était arrivé.
    Ca, ça fonctionne pas encore.

    Voilà comment j'ai fait (en partie grâce à vous, cf le topic précédent) :

    En haut de toutes les pages du blog :
    Code:
    //on va vérifier si le visiteur est un bot, si oui, il n'a pas besoin de cookie (ou il n'indexera jamais les pages)
    $moteur_tab=array("bot","Scooter","Slurp","Voila","WiseNut","Fast","Index","Teoma","Mirago","search","find","loader","archive","Spider","Crawler");
    foreach($moteur_tab as $key) 
    // si ce n'est pas un bot, on fait le test du cookie :
    if(!stristr($_SERVER['HTTP_USER_AGENT'],$key))
     {
    if(!isset($_COOKIE["majeur"]) OR $_COOKIE["majeur"]=='non')
    {
    //on créé un cookie pour lui adjoindre la valeur de la page en cours et s'en servir dans le header du disclaimer afin de rediriger directement sur la page souhaitée au départ, en l'occurence celle visitée lors de cette instruction.
    $page=$_SERVER['PHP_SELF'];
    setcookie
    (
    "page",
    "$page"
    );
    die(header('Location: http://www.site.com'));
    }//ferme if !isset $cookie
    ;}//ferme if !isset stristr()
    
    Donc ici, le gars est bien redirigé vers l'index.

    Et sur l'index, je fais cela :
    Code:
    // avant cela, il y a les instructions pour vérifier l'âge du gars 
    // si tout est bon, on initialise le cookie "majeur" à "oui", et les autres pages s'afficheront alors.
    setcookie
    (
    "majeur",
    "oui"
    );
    
    //si le gars est arrivé par l'accueil, il n'y a pas de cookie page, on le redirige donc vers la page par défaut. Sinon, la valeur du header prend celle de la variable page dans le cookie (initialisée en haut des pages des blogs lors de l'instruction de test des cgu, voir bloc de code précédent)
    if(!isset($_COOKIE["page"]))
    {header($he);}// page par défaut
    
    if(isset($_COOKIE["page"]))//si il y a le cookie page, ça signifie que le gars était arrivé par une page du blog et donc on le redirige (théoriquement...) sur celle-ci :
    {
    $page=$_COOKIE["page"];
    header($page);}// page d'arrivée sur le blog
    ;}
    
    Donc là, ça ne fonctionne pas. On arrive toujours sur la page par défaut.

    Mais en plus, pas moyen d'afficher la valeur du cookie page. Pourtant je regarde dans le navigateur et il y est initialisé et sa valeur est bien celle de la page précédente.



    Voilà, merci d'avance pour votre précieuse aide
     
  2. erestrebian
    erestrebian WRInaute occasionnel
    Inscrit:
    15 Juin 2007
    Messages:
    411
    J'aime reçus:
    0
    et en passant par une variable session?

    je veux dire que tu définis la variable sur la page d'arrivée à la place du cookie. Est-ce que cela fonctionne?

    c'est quoi la page par défaut? le disclaimer ou l'index quand tu dis "page par défaut"
     
  3. 2dm
    2dm WRInaute discret
    Inscrit:
    3 Septembre 2002
    Messages:
    173
    J'aime reçus:
    0
    Déja sauf problème de lecture dans ton code (non-indenté), je pense qu'il y a une erreur sur le traitement des robots.

    Tu itères sur la liste des robots autorisés et tu compare chaque élément avec le nom du visiteur/robot. :
    Code:
    foreach($moteur_tab as $key) 
      if(!stristr($_SERVER['HTTP_USER_AGENT'],$key)){...}
    
    Admettons que le bot "voila" passe, comme tu le teste par rapport au premier élément "bot", tu vas satisfaire ton test (!stristr()) et au final tu vas le rediriger vers la page d'accueil.

    (edit : en lisant le thread original, dans le message de jeroen il parcourt le tableau et met un flag si il trouve un moteur. C'est donc ce que tu dois faire. )

    Ensuite si tu dois débugguer, fait un print_r sur $_COOKIE.
    Et évites les header multiples.
     
  4. jeroen
    jeroen WRInaute passionné
    Inscrit:
    30 Août 2002
    Messages:
    2 131
    J'aime reçus:
    0
    Attention lors de la déclaration des cookies : ils ne sont valables que dans le répertoire de la page où ils ont été créés, sauf si tu précises autre chose :
    Code:
    setcookie("coo",$coo,$datedevalidite,"/");
    le "/" précise que le cookie est valable depuis l'index.
     
  5. Meeuuuhhh
    Meeuuuhhh WRInaute passionné
    Inscrit:
    8 Janvier 2007
    Messages:
    1 498
    J'aime reçus:
    0
    Merci pour la remarque Jeroen.


    Là j'essaie de le faire avec des sessions, mais pas moyen ça ne fonctionne pas non plus.

    j'ai fait ça sur la page du disclaimer :
    Code:
    if(!isset($_SESSION["page"]))
    {header($he);}
    if(isset($_SESSION["page"]))
    {
    $page=$_SESSION['page'];
    header($page)
    ;}
    
    Là si il n'y a pas la variable de session "page", ça fonctionne bien.
    Mais si elle y est, ça ne fonctionne pas.
    J'ai fait un test avec un echo dans le deuxième if et ça fonctionne. J'ai affiché le contenu de la variable et elle contient bien la page visitée précédemment.
    Mais le header ne fonctionne pas, même si je met en valeur une URL telle que https://www.google.com



    Je pige pas. Du tout. Soupiiiiiirrrrrrr
     
  6. YoyoS
    YoyoS WRInaute accro
    Inscrit:
    14 Septembre 2006
    Messages:
    3 226
    J'aime reçus:
    0
    Meeuuuhhh, tu n'as pas envie de te baser sur le référant ? par exemple, s'il existe et que le visiteur n'a pas de cookie, tu fais la redirection et tu lui crées un cookie pour plus l'avoir.

    Il me semble que les robots voyagent sans cookies ni référants non ?
     
  7. Meeuuuhhh
    Meeuuuhhh WRInaute passionné
    Inscrit:
    8 Janvier 2007
    Messages:
    1 498
    J'aime reçus:
    0
    Je suis pas borné à ma soluce, ceci dit je n'ai pas bien compris la tienne et je me dis qu'il ne faut plus qu'une pichenette pour que mon script fonctionne (nonobstant la partie sur la détection des robots).

    Je ne vois pas pourquoi la redirection ne se fait pas alors que la condition est testée et vérifiée.
     
  8. 2dm
    2dm WRInaute discret
    Inscrit:
    3 Septembre 2002
    Messages:
    173
    J'aime reçus:
    0
    je te l'ai dit, n'utilise qu'un seul header à la fin de ton traitement.

    Code:
    $page = $he;
    if(isset($_SESSION["page"])){
      $page=$_SESSION['page'];
    }
    header($page);
    
     
  9. jeroen
    jeroen WRInaute passionné
    Inscrit:
    30 Août 2002
    Messages:
    2 131
    J'aime reçus:
    0
    Le problème est qu'au moment où le gars à validé le disclaimer, le référent sera l'index.


    Sinon la syntaxe correcte du header est celle-ci :
    Code:
    header("Location: http://www.nouveausite.com/");
     
  10. Meeuuuhhh
    Meeuuuhhh WRInaute passionné
    Inscrit:
    8 Janvier 2007
    Messages:
    1 498
    J'aime reçus:
    0
    Y'a rien à faire, ça m'envoie sur la page d'accueil du blog.

    Pourtant quand j'affiche le contenu de $_SESSION['page'];
    ça m'indique bien l'URL de la page profonde et non celle de la page d'accueil du blog.

    Mais le header ne fonctionne que vers la page d'accueil du blog.
     
  11. jeroen
    jeroen WRInaute passionné
    Inscrit:
    30 Août 2002
    Messages:
    2 131
    J'aime reçus:
    0
     
  12. Meeuuuhhh
    Meeuuuhhh WRInaute passionné
    Inscrit:
    8 Janvier 2007
    Messages:
    1 498
    J'aime reçus:
    0
    Oui je l'ai changé, mais ça ne fonctionne pas.
     
  13. Meeuuuhhh
    Meeuuuhhh WRInaute passionné
    Inscrit:
    8 Janvier 2007
    Messages:
    1 498
    J'aime reçus:
    0
    Bon par contre là j'ai essayé ça et la redirection est ok :
    Code:
    $page = $he;
    if(isset($_SESSION["page"]))
    {$page="http://www.site.com/blog/index.php/2008/06/10/1-first-post";}
    header("location: $page"); 
    Je me demande si ce n'est pas parce que l'url récupérée par PHP_SELF commence par / ce qui donne(rait) dans l'url un //blog

    Mais quand j'essaie dans la barre de navigation de taper l'url avec //, ça fonctionne, je ne suis pas pour autant redirigé vers l'accueil du blog (sans quoi le résultat eut été trompeur, l'erreur ne venant pas du header)

    Bon, j'essaie autre chose, je vais récupérer l'url dans un champ post, sur la page du disclaimer. Je reviens, merci de votre aide.
     
  14. jeroen
    jeroen WRInaute passionné
    Inscrit:
    30 Août 2002
    Messages:
    2 131
    J'aime reçus:
    0
    Tu n'a pas d'erreur php ?
    Essaie de faire un echo $page juste avant le header, et donne le résultat, ainsi que ton code exact du header()
     
  15. Meeuuuhhh
    Meeuuuhhh WRInaute passionné
    Inscrit:
    8 Janvier 2007
    Messages:
    1 498
    J'aime reçus:
    0
    Je l'ai fait et l'url de la page s'affiche bien, la condition est vérifiée, c'est ça que je pige pas.

    Je me demande si ce n'est pas dû à la syntaxe de la variable de session, car quand j'avais regardé dans le cookie, l'url était du genre /blog/index.php%$var2008/06/10/&var%first-post

    Bref un gros truc bien crade, car l'url n'était pas rewritée. Peut-être est-ce celà qui fait bugger le header ?
     
  16. Meeuuuhhh
    Meeuuuhhh WRInaute passionné
    Inscrit:
    8 Janvier 2007
    Messages:
    1 498
    J'aime reçus:
    0
    Bon ça fonctionne, j'ai fait comme ça :


    Code:
    $page = "/blog/index.php";
    if(!empty($_POST['redirection']))
    {$page=$_POST['redirection'];}
    header("location: $page"); 
    Et dans le form du disclaimer, je récupère la valeur de la variable de session comme ça :
    Code:
     <input type="hidden" name="redirection" value="<?php 
                      if(isset($_SESSION['page']))
                      {
                
                      $page=$_SESSION['page'];
                      echo"$page";
                      }
                      ?>">

    Il reste à corriger le script de Jeroen pour tester les robots, à vrai dire j'ai dû rater un épisode, je n'ai sans doute pas bien décomposé son script, mon ! devant la fonction n'a surement pas sa raison d'être... Si quelqu'un veut me réexpliquer le script, ça me reposera mes trois neurones surchauffés, merci :)
     
  17. jeroen
    jeroen WRInaute passionné
    Inscrit:
    30 Août 2002
    Messages:
    2 131
    J'aime reçus:
    0
    Ah oui, ton script pour trouver les moteurs est foireux...

    Mon script parcours TOTALEMENT le tableau $moteur_tab pour vérifier si l'USER_AGENT ne correspond pas à un moteur. Toi tu ne fais le test que sur le premier élement...

    je corrige ton script :

    Code:
    $moteur_tab=array("bot","Scooter","Slurp","Voila","WiseNut","Fast","Index","Teoma","Mirago","search","find","loader","archive","Spider","Crawler");
    foreach($moteur_tab as $key) if(stristr($_SERVER['HTTP_USER_AGENT'],$key)) { $moteur=1;break;}
    
    // a ce niveau $moteur==1 si moteur
    
    // si not moteur and not majeur > redirection
    if(!$moteur && (!isset($_COOKIE["majeur"]) || $_COOKIE["majeur"]=='non')) {
    header('Location: http://www.site.com');
    exit;
    }
    
    // sinon on continue
    ...
    
     
  18. YoyoS
    YoyoS WRInaute accro
    Inscrit:
    14 Septembre 2006
    Messages:
    3 226
    J'aime reçus:
    0
    Pas grave, il n'y aura plus de redirection, référant ou pas, puisque cookie il y a !
     
  19. Meeuuuhhh
    Meeuuuhhh WRInaute passionné
    Inscrit:
    8 Janvier 2007
    Messages:
    1 498
    J'aime reçus:
    0
    Bon ça fonctionne, merci à vous tous :)

    Voilà un disclaimer solide qui couvre toutes les pages et exige des cookies php, tout en laissant les moteurs passer (si tout fonctionne bien avec le script de Jeroen, je croise les doigts).
    Et pourtant c'est pas du x. Y'a vraiment des procès qui se perdent.


    Je pige pas trop ta notation Jeroen, j'ai vu ça dans un rêve une fois, les || et autre && sans parler des !$moteur (qui signifie surement !isset($moteur), je ne les utilise jamais.

    C'est mieux ? Et ça veut dire quoi précisément (ce sont des priorités et conditions mais encore...) ?
     
Chargement...
Similar Threads - Redirection header() fonction Forum Date
[PHP] Redirection via header() Développement d'un site Web ou d'une appli mobile 27 Mars 2009
Redirection avec header() de PHP Netlinking, backlinks, liens et redirections 25 Février 2005
Erreur liée à des redirections Débuter en référencement 15 Juin 2022
WordPress Redirections pour changement de domaine et structure de langues Référencement international (langues, pays) 12 Juin 2022
redirection plusieurs Url vers une page URL Rewriting et .htaccess 10 Juin 2022
Redirection 301 Débuter en référencement 29 Mai 2022
Redirection pertinente? Problèmes de référencement spécifiques à vos sites 26 Mai 2022
Redirection 404 via le .htaccess / pb avec les liens relatifs Débuter en référencement 5 Mai 2022
WordPress Petit souci de redirection htaccess URL Rewriting et .htaccess 3 Mai 2022
problème de redirection non souhaitée Administration d'un site Web 28 Avril 2022
Redirection nom de domaine vers site web principal Référencement Google 28 Avril 2022
Erreur liée à des redirections sur Google Search Console Problèmes de référencement spécifiques à vos sites 23 Mars 2022
Redirection d'un site vers un autre Crawl et indexation Google, sitemaps 25 Février 2022
Redirections à faire suite à suppression du multilingue URL Rewriting et .htaccess 21 Février 2022
WordPress redirection de liens WP qui se font tout seul Demandes d'avis et de conseils sur vos sites 17 Février 2022
Problème url rewriting et redirection URL Rewriting et .htaccess 4 Février 2022
Redirection url htaccess Développement d'un site Web ou d'une appli mobile 14 Janvier 2022
Redirection suite refonte site web URL Rewriting et .htaccess 6 Janvier 2022
redirection permanente et affichage URL Rewriting et .htaccess 3 Janvier 2022
Erreur de redirection et méthode de compression Développement d'un site Web ou d'une appli mobile 5 Décembre 2021