PHPSID sur site

  • Auteur de la discussion Auteur de la discussion vinche999
  • Date de début Date de début
WRInaute impliqué
Bonsoir,

Voilà, j'ai un site où j'ai mis des sessions pour que l'internaute connecté à sa zone membre puisse naviguer sur le site, chater, signer le livre d'or, ...

Je viens de constater, dans robotstats, que les url passées en revue par googlebot était index.php?SID.... plan.php?SID....

Je voudrais savoir comment je pouvais faire pour enlever les SID quand l'internaute est sur le site en tant que visiteur et non en tant que membre.

J'ai un bête :

Code:
<?php
session_start();
?>

Merci pour votre aide.
 
WRInaute discret
Pour enlever les SID dans l'url,
Il faut ajouter cela en haut de ton script php.

Code:
  ini_set('session.use_cookies', '1');
  ini_set('session.use_only_cookies', '1');  // PHP >= 4.3
  ini_set('session.use_trans_sid', '0');

Cela permet de forcer a placer les identifiants de sessions dans les cookies. Vu que google n'utilise pas les cookies, tu n'auras pas les ?SID a la fin de ton url.


Tu peux activer ces lignes si le membre n'est pas connecté :
Code:
if( ! $membre->isconnected() ) {
  ini_set('session.use_cookies', '1');
  ini_set('session.use_only_cookies', '1');  // PHP >= 4.3
  ini_set('session.use_trans_sid', '0');
}

Ou laisser ces lignes tout le temps (tes membres devront activer les cookies).
 
WRInaute discret
Juste le
Code:
$membre->isconnected()

Je ne connais pas ta méthode pour savoir si un membre est connecté ou non.

sinon pour le reste, un copier coller suffit ! :D
 
WRInaute impliqué
En résumé, pour annuler les sessions pour un visiteur, je dois placer ce code la :

Code:
<?php
session_start(); 
ini_set('session.use_cookies', '1');
ini_set('session.use_only_cookies', '1');  // PHP >= 4.3
ini_set('session.use_trans_sid', '0');
?>

C'est suffisant ?

PS : je suis un peu lourd ... :oops:
 
WRInaute discret
lol

Ca annule pas les sessions, ca force l'utilisation des cookies. Donc l'identifiant de session est enregistré dans un cookie au lieu d'être transmis de page en page via l'url.

Tu met le code la et ca marchera. (sauf si tes utilisateurs n'acceptent pas les cookies, mais c'est rare) 8)

Plus d'infos sur init_set() ici :
http://fr.php.net/manual/fr/ini.php#ini.list
 
WRInaute impliqué
Donc ça, c'est bon ?

Code:
<?php
session_start();
ini_set('session.use_cookies', '1');
ini_set('session.use_only_cookies', '1');  // PHP >= 4.3
ini_set('session.use_trans_sid', '0');
?>

Réponds moi oui ou non :wink:

Merci pour ton aide.
 
B
bob154
Guest
Les sessions servent pour les utilisateurs qui ont pas activé les cookies. (8-10%)

Par contre les moteurs detestent ça car en réalité ça crée une infinité de pages pour eux (une nouvelle a chaque session). Donc il faut absolument éviter que les moteurs tombent sur des pages avec des SID

Deux solution :
- obliger les visiteurs à accepter les cookies
- garder les sessions mais ne pas montrer la même chose aux robots, ça peut se faire en avec un if tout bête sur l' agent user, du cloacking en quelquesorte. Google recommande pas mais si c'est pas dans un but de fraude ça devrait aller. :)
 
WRInaute impliqué
Salut les gars, c'est re-moi.

Malheureusement, google voit encore des SID dans mes urls :evil:

Help me !!! Je sombre.
 
WRInaute accro
ok ! merci pour les links en mp.

1) Tu sais que tu peux le voir toi même à tout moment si l'identification de session de php est transmit par variable url ou pas ?
Si ce n'est pas le cas il te suffit simplement de désactiver les cookies sur ton navigateur. Cela te sera utile pour les prochains tests ;)

2) Je savais que ça serait utile et j'ai parlé d'un problème ici, que j'ai résolu finalement:
https://www.webrankinfo.com/forum/t/lidentifiant-de-sessions-dans-lurl-pb-referencement.53124/

3) Est-tu sur un dédié ?

4) Quel est la version de php ?


Je viens de regarder le code que l'on ta donné, soit:

Code:
  ini_set('session.use_cookies', '1');
  ini_set('session.use_only_cookies', '1');  // PHP >= 4.3
  ini_set('session.use_trans_sid', '0');

Et je pense qu'il faut en fait que tu mette uniquement cela:

Code:
  ini_set('session.use_trans_sid', '1');
tu notera qu'il ne faut pas le mettre à 0 mais à 1.

Je ne peux rien affirmer, car cela dépend de la version de ton PHP ainsi que ça configuration actuelle. ( si tu peux nous l'indiquer également: phpinfo() -> sessions )
 
WRInaute impliqué
1) Non je ne le savais pas, merci du tuyau

2) Ok, j'ai lu

3) Mutualisé

4) 4.3.11

Je teste de suite sans cookies.

EDIT : Thierry8, je viens de tester la ligne de code que tu m'as donné et je vais attendre le passage de GG pour voir ce que cela donne. En tout cas, en désactivant les cookies, on obtient le résultat voulu. Il faut donc les activer pour se logger à l'espace membre.
 
WRInaute accro
Ce n'est toujours pas bon d'après moi.
A moins que tu n'est pas mis la ligne de code partout (sur toutes les pages ?)
-> j'ai testé sur les pages d'actualités

Peux tu indiquer la configuration des sessions ?
(prend tout le bloc sessions dans le phpinfo() de ton hébergeur)
 
WRInaute impliqué
PS : peux tu ré-essayer, je n'avais pas changé le code sur les pages de mes sous-dossiers.

Voici :

Session Support enabled
Registered save handlers files user

Directive Local Value Master Value
session.auto_start Off Off
session.bug_compat_42 On On
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 100 100
session.gc_maxlifetime 7200 7200
session.gc_probability 1 1
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /home/tmp /home/tmp
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid On On

Je viens de tester les liens de mon site avec xenu et la 8O , bonsoir le nombre d'urls. Des SID partout.
 
WRInaute accro
Ca ne fonctionne toujours pas. (test toujours dans l'actualité)

arg !!! On va y arriver ! ;)

En fait avec les éléments que tu viens de me donner:
- PHP > que la vs 4.2.0
- configuration des sessions sur ton hébergeur


Je retourne mes gants: :?

Code:
ini_set('session.use_trans_sid', '0');
(met le à 0, car tu as une vs de PHP > que 4.2.0 et donc cette option est compilée par défaut)

D'ailleurs ton hébergeur, SIVIT pour ne pas le nommer a mis cette option à on, et je t'avoue ne pas comprendre le pourquoi de la chose..

Tiens moi au courant quand tu as modifié partout pour refaire un test.
 
WRInaute accro
arf ! j'ai essayé et ça ne fonctionne toujours pas..

Je t'avoue que je sèche là.... :(
Est-tu certain de ne pas faire autre chose qui implique cela...
 
WRInaute impliqué
voilà ce que je met chaque fois en débute de page :

Code:
<?php
ini_set('session.use_trans_sid', '0');
session_start(); 
?>
 
WRInaute accro
thierry8 a dit:
1) Tu sais que tu peux le voir toi même à tout moment si l'identification de session de php est transmit par variable url ou pas ?
Si ce n'est pas le cas il te suffit simplement de désactiver les cookies sur ton navigateur. Cela te sera utile pour les prochains tests ;)

<--

Il te suffit après de réactualiser la page en question (par exemple chez toi les actualités) et de regarder les liens dans la barre d'état de ton navigateur. Tu vera ou non l'id de session qui c'est ajouté..

Si jamais tu trouve la solution, je veux bien savoir, des fois que cela ce reproduise pour moi ou autre..merci.
 
WRInaute impliqué
Thierry, le plus étrange, c'est que les liens des menus n'ont ce SID mais les liens du contenu, si.

L'as tu remarqué également ?

Et un truc du style :

Code:
function append_sid($url, $non_html_amp = false)
{
  global $SID;
  if ( !empty($SID) && !eregi('sid=', $url) )
  {
     $url .= ( ( strpos($url, '?') != false ) ?  ( ( $non_html_amp ) ? '&' : '&' ) : '?' ) . $SID;
  }
  return($url);
}
 
WRInaute impliqué
Bonjour thierry8,

J'ai apparement trouvé la solution. Les SID ont disparus des URLs.
Peux tu faire un test.

Voici la fin de mon fichier login :

Code:
$session = $resultat1->pseudo;

session_start(); 
$_SESSION['pseudo'] = $session ;
setcookie("session", $session, time()+31536000);
header('Location: index.php'); 
}
?>

Et voici maintenant le haut de chaque page :

Code:
<?php
setcookie($session);
if (isset($session))
{
ini_set('session.use_trans_sid', '0');
session_start(); 
}
?>

Ce qui veut dire qu'étant donné que google ne s'identifie pas et donc que pour lui $session n'existe pas et bien la session ne démarre pas.

D'après plusieurs tests que j'ai effectués, notamment en désactivant les cookies du navigateur, cela fonctionne.

Peux tu me confirmer que c'est bien le cas.

Par contre, j'ai un petit doute au niveau sécurité sur cette technique. Qu'en penses tu ?
 
WRInaute accro
oui, ça fonctionne, mais c'est évident parce que comme tu le dis le robot de s'identifie pas. Ce n'est donc qu'une solution alternative, et non pas LA solution !

Pour la sécurité, ça dépend comment tu réceptionne ça : $session = $resultat1->pseudo;
 
WRInaute impliqué
thierry8 a dit:
oui, ça fonctionne, mais c'est évident parce que comme tu le dis le robot de s'identifie pas. Ce n'est donc qu'une solution alternative, et non pas LA solution !

Pour la sécurité, ça dépend comment tu réceptionne ça : $session = $resultat1->pseudo;

Mais, le résultat est atteint et c'est le principal pour l'instant.
Je n'ai pas d'autre alternative à l'heure actuelle, j'ai essayé également de changer les sessions par .htaccess mais le serveur me donne une erreur 500. Ce qui signifie que je n'ai pas le choix.

Je vais passer sur un dédié et la, je pourrais changer le paramètres sid et le mettre sur OFF.

Que veux tu dite pat LA solution ?

Que veux tu dire pour la sécurité dans la récupération $session = $resultat1->pseudo; ?
 
WRInaute accro
vinche999 a dit:
Que veux tu dite pat LA solution ?
Ben paramétrage direct sur les sessions...
(qui doit être possible via le init_set())

vinche999 a dit:
Que veux tu dire pour la sécurité dans la récupération $session = $resultat1->pseudo; ?
ben, la récupération de la valeur passe logiquement une série de filtres..
 
WRInaute impliqué
En fait, pour la valeur ini_set(), j'ai remarqué que cela rendait invisible les sid aux yeux de l'internaute mais pas aux yeux des robots. Je vais devoir passé sur dédié pour pouvoir agir directement sur les sessions.

Mon hébergeur, avec son mode sur "on" par défaut, m'empêche de le faire.

Peux tu t'expliquer sur :

thierry8 a dit:
ben, la récupération de la valeur passe logiquement une série de filtres..
Merci
 
WRInaute accro
ben je ne sais pas quoi te dire de plus...
Je ne sais pas comment tu réceptionne ta valeur moua..

Quand tu la réceptionne tu vérifie certainne chose au préalable je pense avant...encore faut-il avoir besoin de le faire...
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Haut