Pour commencer par ce qui a été ma première question, lorsque je me suis intéressé aux sessions, il s'agit d'un cookie côté serveur, contenu dans un répertoire ad hoc (généralement tmp). La gestion de ce cookie particulier, contenant toutes les variables que le script lui aura transmis, est déterminée selon une alternative : l'ID de la session en cours (constante SID http://us2.php.net/manual/fr/ref.session.php#session.idpassing) est contenue dans un cookie côté client ou, quand ce dernier a désactivé les cookies, dans l'URL (si l'option est implémentée dans le php.ini). La doc de www.php.net explique ces options.
Sans parler des paniers électroniques, des forums, voire des interfaces d'administration, une session PHP est extrêmement pratique pour proposer des options d'affichage, comme c'est le cas pour ces modestes pages. Par exemple, au cas où vous ne l'aurez pas remarqué, vous pouvez afficher cette page sur fond blanc. Quand il fallait, avant PHP 4.0, suivre un client à l'aide d'une base de données, il suffit maintenant d'un maigre cookie pour y parvenir ; sans remettre en cause MySQL pour conserver certaines traces (utilisables à la prochaine visite).
NB : pour utiliser les sessions chez Free, il vous faut créer le répertoire "session" à la racine de votre site !
Comme il est dit dans l'URL citée plus haut, une session PHP (ou un cookie) n'est pas un gage total de sécurité, surtout quand on n'utilise pas un protocole HTTP sécurisé : les variables qui y sont contenues doivent être bien pensées, afin de ne pas risquer la casse ! Evitez de stocker les mots de passe, ou alors codés, avec md5() http://fr2.php.net/md5 par exemple.
<?php /* ce fichier doit être chargé avant tout envoi d'une en-tête HTTP un espace avant la balise PHP et c'est l'erreur fatale ! */ # démarrage de la session session_start(); # définition d'une date de validité pour le cookie sinon # il ne sera valable que jusqu'à la fermeture du navigateur # comme la session, d'ailleurs $cookieDate = time() + 31536000; // valable un an if( empty($_COOKIE['c_lastvisit']) ) { # il s'agit d'un nouveau visiteur : # création du cookie et d'une session # à la date courante $_SESSION['s_lastvisit'] = time(); setcookie('c_lastvisit', time(), $cookieDate); } elseif( empty($_SESSION['s_lastvisit']) ) { # il s'agit d'un visiteur connu : # mise à jour de la session selon cookie $_SESSION['s_lastvisit'] = $_COOKIE['c_lastvisit']; $_SESSION['s_menu'] = $_COOKIE['c_menu']; # mise à jour du cookie (la date courante) setcookie('c_lastvisit', time(), $cookieDate); } # l'utilisateur demande un autre menu # ou une session 's_menu' n'a pas été implémentée if ( isset($_GET['menu']) || !isset($_SESSION['s_menu']) ) { $_SESSION['s_menu'] = 1; if($_GET['menu'] == 2) $_SESSION['s_menu'] = 2; # on mémorise la config dans un cookie setcookie('c_menu', $_SESSION['s_menu'], $cookieDate); } /* Affichage et traitement : quand vous rechargez la page ou quittez le navigateur le choix ne change pas et votre date de visite est précisée */ echo "<html><head>\n<title>Test</title>\n</head><body>\n"; if($_SESSION['s_menu'] == 1) { echo "<p>Voici un lien : \n"; echo "<a href=\"?menu=2\">voir un second</a></p>\n"; echo "<p>Recharger la <a href=\"". $_SERVER['PHP_SELF']."\">page</a>\n"; echo "<br>Dernière visite le ". date("d.m.Y à H:i",$_SESSION['s_lastvisit'])."</p>\n"; } else { echo "<p>Voici un second lien : \n"; echo "<a href=\"?menu=1\">revoir le premier</a></p>\n"; echo "<p>Recharger la <a href=\"". $_SERVER['PHP_SELF']."\">page</a>\n"; echo "<br>Dernière visite le ". date("d.m.Y à H:i",$_SESSION['s_lastvisit'])."</p>\n"; } echo "</body></html>"; ?>
<?php /* Si l'on ne souhaite pas activer une session au passage de certains robots ou les orienter, on peut configurer le fichier de session ainsi : */ # tableau de robots à surveiller $userAgent = array( "Googlebot", "Slurp", "Fast", "Scooter", "VoilaBot", ); # un internaute par défaut... $isRobot = false; foreach($userAgent as $spider) { if (stristr($_SERVER['HTTP_USER_AGENT'],$spider)) { # c'est un spider référencé $isRobot = true; break; } } # dans ce cas pas de session (ni ID, ni cookie) if(!$isRobot) session_start(); ?>
http://dev.ppan.net