revoilà mes sessions :)

WRInaute impliqué
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:
 
WRInaute impliqué
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?
 
WRInaute impliqué
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:
 
WRInaute impliqué
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 ;)
 
WRInaute impliqué
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
 
WRInaute impliqué
"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.
 
J
JPC
Guest
The Jedi a dit:
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 ;)


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...
 
J
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...
 
WRInaute impliqué
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 ...
 
J
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...
 
WRInaute impliqué
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:
 
J
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 ;-)
 
Discussions similaires
Haut