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...
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...