revoilà mes sessions :)

Discussion dans 'Administration d'un site Web' créé par caro, 27 Février 2004.

  1. caro
    caro WRInaute impliqué
    Inscrit:
    21 Juillet 2003
    Messages:
    761
    J'aime reçus:
    0
    Me revoilà avec mes sessions :cry:

    2 questions me tracassent :


    1) on vérifie le user agent afin de ne pas ouvrir une session si c'est un bot,
    googlebot passe et donc la session n'est pas ouverte mais cela n'empeche pas que dans tous les liens il y ait quand même une variable (même si elle sera vide).
    exemple :
    Code:
    page2.php?sid=
    en fait tous les liens possèdent cette variable afin de ne pas perdre l'id quand les visiteurs ont bloqué les cookies mais malgré que cette variable soit vide quand googlebot passe , est-ce qu'elle a une incidence ?
    google repère t'il les sessions par le "sid" ou par son numéro "14d2g33d3d363d235dddg" ?




    2) est ce que je peux mettre la fonction ci-dessous ?

    Code:
    // verification du user agent
    if (stristr($_SERVER['HTTP_USER_AGENT'], 'googlebot') === FALSE)
    {
    session_start()
    // ce n'est pas googlebot > la session est ouverte
    }
    else
    {
    $affiche="oui";
    // on definit la variable affiche afin de la récupérer plus bas dans le body
    }
    //plus loin dans le body on fait afficher grace à la variable "affiche" des liens qui ne comportent pas du tout de variable
    Code:
    // verification de la variable "affiche"
    if ($affiche==oui)
    {
    print' <a href="page2.htm">page2</a><a href="page3.htm">page3</a><a href="page4.htm">page4</a>
    }
    // comme ca au moins google ne voit que des liens sans variables

    c'est bon ou je fais encore n'importe quoi ?? :oops:


    merci beaucoup à ceux qui me répondront car ce post est long et je suis chiante avec mes sessions
    carole
    :wink:
     
  2. jeromax
    jeromax WRInaute impliqué
    Inscrit:
    12 Novembre 2003
    Messages:
    887
    J'aime reçus:
    0
    Moi je ne m'occupe pas du passage des sessions et ça marche très bien (bon pas aujourd'hui parce que Free est planté... :wink: )

    Ta fonction marchera
    si robot pas de session
    sinon ouverture de session

    avec dans tous les cas, des liens interne absolus
    Je n'ai donc jamais, et quelque soit le visiteur de parametre sid= ou id= où je ne sais pas quoi d'autre...
    Peut être que je perd ceux qui n'accepte pas les cookies, mais il y en a t-il beaucoup?
     
  3. caro
    caro WRInaute impliqué
    Inscrit:
    21 Juillet 2003
    Messages:
    761
    J'aime reçus:
    0
    oui mais du coup je pose une question encore plus importante :

    si on décide que seul les visiteurs acceptant les cookies puisse utiliser le site (et ca ne me dérange pas d'ailleurs) donc on ne met plus les liens "sid" en variable,
    mais comme google n'accepte pas les cookies est ce que le serveur va quand meme créer les liens "sid" meme si je ne les ai pas mis dans mes liens ???

    oula j'ai du mal avec ses sessions :cry:
     
  4. jeromax
    jeromax WRInaute impliqué
    Inscrit:
    12 Novembre 2003
    Messages:
    887
    J'aime reçus:
    0
    Cela ne risque pas puisque tu n'as pas ouvert de session :wink:
     
  5. Oncle Tom
    Oncle Tom WRInaute impliqué
    Inscrit:
    31 Mars 2003
    Messages:
    714
    J'aime reçus:
    0
    Je pense qu'au lieu de faire des liens en conditionnels, tu devrais tout simplement modifier les supprimer de tes liens tout court !

    Je ne sais pas comment tu fonctionnes actuellement avec ton site mais pour ce faire, c'est simple.

    Ta première étape est bonne : tu détermines si c'est un robot ou pas.

    Il te suffit de mettre en buffer ta page avant de la renvoyer vers l'utilisateur (ob_start() & cie).
    Dans tes pages, tu conserveras tes liens avec le sid=tasession@32caractères.

    Et avant de tout renvoyer vers l'utilisateur, tu "parses" le contenu de ta page. Si c'est un utilisateur, en fait tu ne fais rien, tu renvoies simplement le contenu de la page. Sinon, si c'est un robot, tu fais un
    Code:
    preg_replace("##(\?|&|;|&)sid=([0-9a-zA-Z]){32}#si",'',$html);
    
    Ca effacera toutes les occurences de sid=machin dans ta page ;)
     
  6. caro
    caro WRInaute impliqué
    Inscrit:
    21 Juillet 2003
    Messages:
    761
    J'aime reçus:
    0
    jedi ca a l'air vraiment super ton truc
    mais j'ai rien compris désolé :cry:

    tu pourrais plus développer tout ca
    merci
    carole
     
  7. Oncle Tom
    Oncle Tom WRInaute impliqué
    Inscrit:
    31 Mars 2003
    Messages:
    714
    J'aime reçus:
    0
    "Super" :arrow: oui c'est le mot ;)

    Bon je te prends un exemple classique.

    Page "classique" (machin.php)
    Code:
    <html>
    <head>
     <title>Titre</title>
    </head>
    
    <body>
    
    <a href="tapage.php?sid=888efdb9abe835a44031ef76d0f901a4">Super un lien mais Google ne l'aime pas</a>
    
    </body>
    
    </html>
    
    Jusque là tu es d'accord que tu ne peux plus du tout agir sur ta page à partir du moment où les balises sont "dépassées". Quand tu es à ta balise <a></a>, on ne peut plus modifier le titre de la page par exemple.

    L'astuce consiste à "capturer" tout ce que tu renvoies au navigateur. Par défaut quand tu fais
    Code:
    echo "coucou c'est moi";
    
    tu renvoies un flot de données au navigateur. Quand il renvoie le moi "moi", il a déjà renvoyé tout ce qu'il y a avant et tu ne peux donc plus interagir avec.

    Pour "capturer" des flots de données, il existe un ensemble de fonctions qui mettent tout en mémoire et qui ne renvoie rien tant que tu ne l'as pas décidé.
    DOC php ici : http://fr.php.net/manual/fr/function.ob-start.php et de façon globale : http://fr.php.net/manual/fr/ref.outcontrol.php

    Petit exemple
    Code:
    ob_start();
    echo "coucou c'est moi";
    
    Si tu mets ça sur une page, tu ne verras pas la phrase "coucou c'est moi" car PHP l'aura mis en attente, dans une zone mémoire. Vu que tu ne lui as pas dit gentiement "renvoie moi mes données" il ne fera rien.

    Exemple un peu plus développé :
    Code:
    //on commence à capturer les données
    ob_start();
    
    //
    echo "coucou c'est moi";
    
    // on arrête la capture : on met tout dans une variable
    // http://fr.php.net/manual/fr/function.ob-get-contents.php
    $html = ob_get_contents();
    
    // on efface le stockage dans la mémoire tampon vu qu'on a déjà tout mis dans une variable. On évite de manipuler le double de données.
    ob_end_clean();
    
    /*
    on arrive en fin de page et finalement, on se dit que notre phrase elle craint, on veut remplacer "moi" par "Caro"
    */
    
    //on manipule directement ce qu'on avait capturé auparavant
    $html = str_replace("moi","Caro",$html);
    
    // maintenant tout est prêt, on renvoie le bazar au navigateur du visiteur
    echo $html;
    
    Et là, la phrase qui sortira sera "coucou c'est Caro". OK ça ne résoud pas le problème mais c'est le raisonnement identique : tu as des données standard et tu veux les adapter sans alourdir toutes tes pages. Grâce à ce système on a pu modifier ultérieurement une phrase qui aurait été "perdue" sinon.

    Pour en revenir au tout tout premier exemple, tu vas vite comprendre la finalité ultime finale :p

    Code:
    
    ob_start();
    echo '
    <html>
    <head>
     <title>%TITRE%</title>
    </head>
    
    <body>
    
    <a href="tapage.php?page=machin&%SESSION%">Super un lien mais Google ne l'aime pas</a>
    
    </body>';
    
    $html = ob_get_contents();
    ob_end_clean();
    
    // on change le titre, par exemple en fonction du contenu renvoyé par une requête dans ta base de données
    $html = str_replace('%TITRE%',"Le nouveau titre de la page",$html);
    
    //on vérifie maintenant si on doit afficher l'ID de session dans l'url
    //on se sert des REGEX (Expressions régulières), c'est ardu au début mais ultra pratique quand on comprend
    // FONCTION : http://fr.php.net/manual/fr/function.preg-replace.php
    // SYNTAXE : http://fr.php.net/manual/fr/pcre.pattern.syntax.php
    
    //le visiteur n'est pas un robot
    if (stristr($_SERVER['HTTP_USER_AGENT'], 'googlebot') === FALSE)
     {
      session_start();
      $html = str_replace('%SESSION%', 'sid='.session_id(), $html);
     }
    //le visiteur est un robot, mon dieu ça craint
    else{
      $html = str_replace('%SESSION%', '', $html);
     }
    
    echo $html;
    
    </html>
    
    Disons qu'on a du code HTML brut et on remplace des éléments que l'ont sait dynamiques et surtout variables d'un affichage de page à l'autre.
    Les "%SESSION%" et "%TITRE%" ne sont qu'un exemple de syntaxe ... c'est juste pour remplacer uniquement ce qui t'intéresse. Si tu fais un lien "<a href="mapage.php?session">lien</a>" et que tu veux remplacer "session" par "sid=..." ben ça te remplacera malheureusement TOUTES les occurences de "session" dans ta page. Style une "session de surf" deviendra "sid=... de surf".

    Enfin j'ai essayé de détailler au maximum, j'espère que ça sera plus compréhensible.
    N'hésite pas à poser des questions sur tout ça ou sur des besoins plus spécifiques ;)


    PS : tout ça, ce sont les bases du "templating", la gestion de modèles de page.
     
  8. JPC
    JPC Guest

    tu as déjà utilisé ça the Jedi ???

    parceque ça me parait bizarre...
    un fichier php avec des liens vers "monfichier.php?".session_name()."=".session_id()
    qui est appelé en read ? par un autre fichier php qui enlève les paramètres de sessions ?
    déjà ça me parait compliqué...
    Mais en plus et surout, le html généré par le php devrait ensuite avoir à nouveau les identifiants de session ajouté en automatique par apache...

    bref, la solution de Caro me parait + viable : simplement supprimer l'activation de sessions...
     
  9. JPC
    JPC Guest
    pour moi, le template sur les session, c'est plutot pour s'assurer de l'ajout des identifiants de sessions sur des liens javascript pour ceux qui refusent les cookies...
    pour enlever les identifiants; ça m'échappe...
    Il m'étonnerait franchement qu'à la base Caro ait ecrit

    Code:
    <a href="tapage.php?<?php echo session_name()."=".session_id();?>">Super un lien mais Google ne l'aime pas</a>
    
    mais plutot un simple :
    Code:
    <a href="tapage.php">Super un lien mais Google ne l'aime pas</a>
    
    le problème est que les identifiants de session sont rajoutés par apache à ceux qui n'acceptent pas les cookies;
    mais ce n'est pas de supprimer une partie de code prévue en php...
     
  10. Oncle Tom
    Oncle Tom WRInaute impliqué
    Inscrit:
    31 Mars 2003
    Messages:
    714
    J'aime reçus:
    0
    Heu j'avoue que je ne comprends pas le problème que tu soulèves oO

    Justement t'es pas obligé de faire passer les sessions via les cookies. J'expliquais comment faire, le principe ... pas tout ce qu'il faut mettre sur ses pages.

    D'ailleurs si tu lis bien le deuxième message explicatif, tu verrais que j'ai simplifié l'utilisation des sessions dans l'url.

    Sinon y'a aussi la solution de gérer soi même les sessions : pas en passant par Apache mais en les générant soi même et en les stockant dans la BDD.


    Enfin son problème, ce n'est pas vraiment les sessions mais le sid= qui reste vide et mange un paramètre pour rien.

    PS : pour en revenir au preg_replace(), j'ai rien inventé : Invision Power Board le faisait déjà avant moi ...
     
  11. JPC
    JPC Guest
    en effet, j'avais mal lu son problème ...
    Caro : je ne vois pas bien en quoi le paramètre sid= servirait à quelquechose aux gens qui n'acceptent pas les cookies (en dehors de liens javascript...),
    pour moi, toi tu n'as qu'à ecrire ton
    Code:
    <a href="page2.php">;
    bon, je vois 2 possibilités :

    -tu as pas mis le trans_sid à 0 ou false dans le php.ini, un htaccess ou au début de ton fichier index.php; bref tu as réussi à dire qu'il ne faut pas compléter automatiquement l'url avec l'identifiant de session lorsque la session est démarrée et que l'intenaute n'accepte pas les cookies.
    dans ce cas, la variable sid= n'apporte que des désagréments à google... uatant l'enlever, je suppose que tu aurais une variable qui ajouterais l'identifiant de session apreès le sid=; dans ce cas, il suffit que tu inclue dans cette variable ton sid= :
    Code:
    $paramsession="?sid=".session_id();
    et tes liens seraient alors
    Code:
    <a href="page2.php<?php echo $paramsession;?>">;
    google et les internautes qui acceptent les cookies voient juste page2.php... :)

    -autrement
    si la session est ouvert et que l'internaute n'accepte pas les cookies,
    le nom de session et son identifiant sont rajoutés automatiquement à tes liens (en dehors des javascripts)
    donc, c'est simple : pour google, il suffit de ne pas ouvrir la session et
    tes liens sont juste
    Code:
    <a href="page2.php">
    et tout le monde navigue correctement...
     
  12. caro
    caro WRInaute impliqué
    Inscrit:
    21 Juillet 2003
    Messages:
    761
    J'aime reçus:
    0
    J'ai résumé mon problème , merci de m'aider les gars car là vous êtes trop fort pour moi et je vous suis plus :oops:

    je crois que je me suis mal expliquée alors je dois préciser un truc super important :
    je ne peux pas toucher au php.ini, et donc si les visiteurs ont bloqué les cookies alors je suis obligé pour transmettre l'id de session de me servir des liens sous la forme :
    Code:
    <a href="page2.php?sid=$sid">
    1) je mets un "user agent" et n'ouvre pas de session quand c'est un robot > ca c'est réglé

    2) je mets tous mes liens sous la forme
    Code:
    <a href="page2.php?sid=$sid"> 
    pour que les visiteurs avec cookies bloqués continuent à transmettre l'id de session par l'url

    MA QUESTION :
    Google n'a donc pas ouvert de session (c'est sur) mais par contre il voit quand même un lien de ce type :
    Code:
    <a href="page2.php?sid=$sid"> 
    ce qui donne en url :
    Code:
    www.monsite.com/page2.php?sid=
    (la variable sid étant vide car aucune session ne s'est ouverte)
    est-ce que cette variable "sid" même vide gêne google ?


    merci pour tout
    y a plus de fou de php ici que sur les forums spécialisés php :lol:
    carole
    :wink:
     
  13. JPC
    JPC Guest
    normalement, sid comme nom de variable, particulièrment s'il a une valeur nulle ne gênera pas google.
    Le nom de variable ne me parait toutefois pas utile :
    pourquoi ne pas avoir un lien
    Code:
    <a href="page2.php?$sid"> 
    où $sid cntient la chaine sid= en plus de la valeur ?

    --------------------------------
    un fou de php ;-)
    et à bas le javascript lol ;-)
     
  14. caro
    caro WRInaute impliqué
    Inscrit:
    21 Juillet 2003
    Messages:
    761
    J'aime reçus:
    0
    merci JPC je vais faire ca :wink:
     
  15. Oncle Tom
    Oncle Tom WRInaute impliqué
    Inscrit:
    31 Mars 2003
    Messages:
    714
    J'aime reçus:
    0
    Ouais j'abdique ^^ j'ai cherché trop loin ...
     
  16. JPC
    JPC Guest
    mais bon, n'hésite pas à nous donner des nouvelles...
     
Chargement...
Similar Threads - revoilà sessions Forum Date
Me revoila parti dans les truc tordus ... Développement d'un site Web ou d'une appli mobile 12 Octobre 2010
et hop, le revoila revenu Référencement Google 9 Mai 2007
sessions PHP sans cookies ? Développement d'un site Web ou d'une appli mobile 26 Décembre 2021
Memcached/PHP gestion de sessions Développement d'un site Web ou d'une appli mobile 22 Juillet 2020
stats taux de rebond et durée sessions Débuter en référencement 7 Février 2019
Nouvelles sessions vs Utilisateurs Google Analytics 23 Novembre 2016
de 0 à 5O sessions/jour d'une seule ville ?? Google Analytics 12 Septembre 2016
[résolu] Sessions : lire le contenu alors qu'on ne sait pas comment il est nommé... Développement d'un site Web ou d'une appli mobile 25 Mai 2016
Différence énorme entre clics Facebook Ads et Sessions Google Analytics Google Analytics 9 Février 2016
Extraire les sessions pour chaque mois par source Google Analytics 30 Septembre 2015
Changement URL Facebook dans GA et diminution des sessions Google Analytics 25 Juin 2015
Unique Pageviews vs Sessions Google Analytics 13 Mai 2015
GA change sa terminologie : visiteurs devient sessions Google Analytics 17 Avril 2014
Supprimer les sessions via les URL dans Prestashop (token) Développement d'un site Web ou d'une appli mobile 2 Août 2012
[Ajax] Appel fichier externe et sessions Développement d'un site Web ou d'une appli mobile 17 Juillet 2012
Google Bot et Cookies et sessions Développement d'un site Web ou d'une appli mobile 11 Juin 2012
Sessions, cookies, hash. Développement d'un site Web ou d'une appli mobile 10 Mars 2012
Sessions PHP et Google Référencement Google 3 Mai 2011
Table phpbb_sessions de mon forum phpbb3 énorme Développement d'un site Web ou d'une appli mobile 21 Mars 2011
Espace membre, sessions et sécurisation en PHP Développement d'un site Web ou d'une appli mobile 12 Août 2010