PHPSESSID avec le réferrencement: j'ai peut être 1 solution?

Nouveau WRInaute
J'ai fais ca sur mes script et ca a l'air de marcher.

accueil.php
=========
function callback($buffer) {
if(!$use_session) return (preg_replace("/[\?\&]PHPSESSID=.*?([^a-z0-9])/","\\1",$buffer));
else return $buffer;
}

// Mise en buffer de la page HTML générée, ne l'affiche pas en temps réel
ob_start("callback");

// inclusion du script de gestion de session: sessionç_start() etc...
include("session.php");
if(!$use_session) {

// Si ne pas utiliser de session alors détruire la session qui vient d'être crée
unset($_GET[session_name()]);
$CookieInfo = session_get_cookie_params();
if ( (empty($CookieInfo['domain'])) && (empty($CookieInfo['secure'])) ) {
setcookie(session_name(), '', time()-3600, $CookieInfo['path']);
} elseif (empty($CookieInfo['secure'])) {
setcookie(session_name(), '', time()-3600, $CookieInfo['path'], $CookieInfo['domain']);
} else {
setcookie(session_name(), '', time()-3600, $CookieInfo['path'], $CookieInfo['domain'], $CookieInfo['secure']);
}
setcookie(session_name(),"",time()-3600,"/");
unset($_COOKIE[session_name()]);
$_SESSION=array();
session_destroy();
}

....
<!-- on inclue le formulaire qui permet de se logger -->
<? include("login.php"); ?>
....

</html>
<? ob_end_flush(); ?>

login.php
======
...
...
$_SESSION["use_session"]="1";
header("Location: accueil.php?use_session=1");

Explications:
========
accueil.php crée une session pour y stocker des variables dont la variable use_session.
Cette variable sera définie par login.php qui affiche le formulaire si login/mot de passe
vides sinon accede a la base de donnée pour tester, si login/pass ok alors creer une session et definie les variables.
de retour a accueil.php si use_session elle est définie a 1 alors on utilise de sessions, sinon on utilise pas donc fo détruire la session en cours.
Cependant comme le session_start induit une réecriture des liens href avec PHPSESSID dedans meme si session_destroy le suit, ob_start permet d'effacer les occurences de PHPSESSID.
Ainsi si on utilise pas les sessions, les liens avec PHPSESSID sont nettoyés.
Si les sessions sont utilisés les liens sont intacts.

Je sais pas si cette solution est vraiment correcte.
J'attends des avis...
 
Nouveau WRInaute
Modifs

login.php
=======
...
header("Location: accueil.php?use_session=1&PHPSESSID=".session_id());

accueil.php
========
function callback($buffer) {
if(!$use_session && !$_SESSION["use_session"]) return (preg_replace("/[\?\&]PHPSESSID=.*?([^a-z0-9])/","\\1",$buffer));
else return $buffer;
}
...
if(!$use_session && !$_SESSION["use_session"]) {
...

ainsi les sessions marcheront meme si le navigateur n'accepte pas les cookies
 
WRInaute impliqué
The Jedi a dit:
Et comme ça adios le PR interne ;) tu le dilues encore plus et tes liens ont moins de poids.
Non, je crois que les liens sont bien assimilés comme internes s'il s'agit du même nom de domaine. Ou du moins, c'est ce que j'ai entendu dire à plusieurs reprises !
Cela dit, pour pas prendre de risques : utiliser les cookies et/ou l'UR :wink:
 
WRInaute passionné
Bonsoir Bobez,

oui les liens relatifs sont toujours remplacés en absolus par les moteurs. Les 2 donnent le même référencement.
 
Nouveau WRInaute
Hmmm,
Ouais mais mettre en absolu tous les liens d'un site déjà fait ca prends du tmps.
De plus si je fais des tests sur mon serveur perso pour ensuite les balancer chez l'hébergeur
c relou.
Ou alors fo faire une fonction qui créer les liens...

:-)
 
WRInaute passionné
Dreamweaver ou un autre éditeur avancé te permet de changer rapidement tous les liens d'un site.
 
WRInaute discret
lothar a dit:
Dreamweaver ou un autre éditeur avancé te permet de changer rapidement tous les liens d'un site.

Ou n'importe quel logiciel de type 'search&replace" ou un script de qques lignes avec une regexp
 
WRInaute discret
Re: PHPSESSID avec le réferrencement: j'ai peut être 1 solut

SnAKes a dit:
Cependant comme le session_start induit une réecriture des liens href avec PHPSESSID dedans

non. Il suffit de changer le parametrage par defaut de url_rewriter.tags :

Code:
ini_set('url_rewriter.tags','');
 
Nouveau WRInaute
Ouais mais j'ai vu qqs part qu'en faisant ca que le site ne fonctionnera pas terrible pour ceux qui desactivent le cookie.
En faisant mon truc, je desactive la session quand c pas necessaire, et j'active quand c necessaire. Le PHPSESSID est envoyé en cookie ou en parametre URL selon.
Bref sur mon site ca a l'air de marcher, donc pour moi ca va :)
 
WRInaute discret
SnAKes a dit:
Ouais mais j'ai vu qqs part qu'en faisant ca que le site ne fonctionnera pas terrible pour ceux qui desactivent le cookie.

Euh ... c'est évident ;-)
Puisque si tu desactives la re-ecriture d'URL (et donc la transmission de l'ID de session via l'url) et que dans le meme temps, les cookies sont desactivés, et bien l'ID de session n'est plus transmis du tout ...

SnAKes a dit:
En faisant mon truc, je desactive la session quand c pas necessaire, et j'active quand c necessaire. Le PHPSESSID est envoyé en cookie ou en parametre URL selon. Bref sur mon site ca a l'air de marcher, donc pour moi ca va :)

Mon commentaire ne concernait pas ton script en general, mais uniquement la phrase que j'ai citée. Je me suis permis de rectifier ce passage inexact. C'est tout ;-)
Apres, tu en fais ce que tu en veux : et en la matiere il n'y a pas une unique facon de faire ;-).

Donc je re-precise, a titre d'INFORMATION (ce n'est pas une critique, vis-a-vis de toi) que contrairement à ce que tu disais, il est possible de faire un session_start() sans que cela induise une re-ecriture des urls.
 
Discussions similaires
Haut