Effet Accordéon

Section 1

Mauris mauris ante, blandit et, ultrices a, suscipit eget. Integer ut neque. Vivamus nisi metus, molestie vel, gravida in, condimentum sit amet, nunc. Nam a nibh. Donec suscipit eros. Nam mi. Proin viverra leo ut odio.

Section 2

Sed non urna. Phasellus eu ligula. Vestibulum sit amet purus. Vivamus hendrerit, dolor aliquet laoreet, mauris turpis velit, faucibus interdum tellus libero ac justo.

Section 3

Nam enim risus, molestie et, porta ac, aliquam ac, risus. Quisque lobortis.Phasellus pellentesque purus in massa.

  • List item one
  • List item two
  • List item three

mardi 16 avril 2013

Sessions et cookies
 Les cookies
 Création
Un cookie s'envoie avec la fonction setcookie(). Les arguments sont les suivants :
• Nom
• Valeur
• date d'expiration (un timestamp unix)
• chemin (validité du cookie suivant le chemin dans l'url)
• domaine (pare défaut, le vôtre)
• secure : flag de sécurité : le cookie n'est accessible que via une connexion sécurisée.
Seul le premier argument est obligatoire. Pour ne pas spécifier une valeur, il suffit de ne rien mettre.
Attention à quelques limitations :
• Un cookie étant envoyé avec les entêtes HTTP, il ne peut pas être envoyé si une sortie a déjà eu
lieu (html, texte, ...)
• Un cookie n'est pas disponible dans la page qui l'a créé. Il faut soit recharger la page, soit pointer
sur une autre.
• Un cookie ne peut être supprimé qu'avec les mêmes paramètres qui ont servi à sa création. C'est
le navigateur qui supprime le cookie.
setcookie("testcookie",session_id(),time()+3600);
if(isset($_COOKIE['testcookie'])) echo $_COOKIE['testcookie'];
Dans l'exemple précédent, au premier chargement rien ne sera affiché car le contenu du cookie n'est
pas encore accessible. Au deuxième chargement la valeur sera réellement affichée, mais attention au
décalage entre la mise à jour et l'accès.
if(!isset($_COOKIE['testcookie'])) {
 setcookie("testcookie",'toto',time()+3600);
 header("Location: http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
}
Dans cet exemple, on regarde si le cookie existe, sinon on le créé et on rappelle la page.
13.1.2 Accès
On accède au cookie grâce à la variable globale $_COOKIE qui est un tableau. L'index du tableau
est le nom du cookie.
S. ROHAUT Cours Programmation PHP Page 62/93$valeur=$_COOKIE['testcookie'];
echo $valeur; // par rapport à l'exemple précédent : toto
Note  :  on peut  placer   les  tableaux avec  les cookies.   Il   suffit  de nommer   son cookie avec une
notation par crochets.
setcookie("testcookie[1]",'toto',time()+3600);
setcookie("testcookie[2]",'titi',time()+3600);
setcookie("testcookie[3]",'tata',time()+3600);
... (page suivante)
foreach($_COOKIE as $tab) {
 if(is_array($tab)) foreach($tab as $key => $value) echo "$key => $value";
}
13.1.3 Suppression
Pour supprimer un cookie, il suffit de donner une date antérieure à la date actuelle à celui-ci.
if(!isset($_COOKIE['testcookie'])) {
 setcookie("testcookie",'toto',time()+3600);
} else {
 setcookie("testcookie",'',time()-3600);
}
if(isset($_COOKIE['testcookie'])) echo "OK";
else echo "Pas de cookie";
Dans l'exemple précédent, les appels au script vont provoquer successivement l'affichage de « pas
de cookie » et « OK ».
13.2 Identification HTTP
13.2.1 Connexion
Cette possibilité n'est disponible que si PHP est utilisé comme module Apache, et pas en tant que
script  CGI.  L'identification  HTTP  permet   via   l'envoi   d'un  HEADER HTTP  de   demander   une
identification au client. Dans ce cas le navigateur va ouvrir une fenêtre de connexion demandant une
saisie de login et de mot de passe. PHP récupère bien entendu ces valeurs. Voici l'exemple issu de la
documentation PHP
if (!isset($_SERVER['PHP_AUTH_USER'])) {
 header('WWW-Authenticate: Basic realm="Slyunix"');
 header('HTTP/1.0 401 Unauthorized');
 echo 'Texte utilisé si le visiteur utilise le bouton d\'annulation';
 exit;
} else {
 echo "<p>Bonjour, {$_SERVER['PHP_AUTH_USER']}.</p>";
 echo "<p>Votre mot de passe est {$_SERVER['PHP_AUTH_PW']}.</p>";
}
Dans  cet  exemple,  on passe  en entête  une demande d'authentification.  En  cas  d'échec   (bouton
annuler) un message d'annulation est affiché. Sinon on peut récupérer les valeurs via les variables :
• $_SERVER['PHP_AUTH_USER'] : login
S. ROHAUT Cours Programmation PHP Page 63/93• $_SERVER['PHP_AUTH_PW'] : mot de passe
13.2.2 Déconnexion
La déconnexion n'est pas si évidente que ça car une fois connecté, les identifiants sont placés dans la
session. La méthode la plus simple consiste à fermer le navigateur et à le relancer.
13.3 Sessions PHP
13.3.1 Principe
Les sessions permettent de préserver des données lors de la visite d'un site. Chaque personne se voit
attribué un identifiant unique appelé identifiant de session, ou SID. Ce SID est soit stocké dans un
cookie,   soit   passé   par  URL.  On   peut   ainsi   définir   un   nombre   infini   de   variables   qui   seront
accessibles durant toute la durée de la session.
Notez  que   si  vous   fermez   et   relancez  votre  navigateur,  vous   changez  d'identifiant,   et  donc   la
précédente session est perdue, même si elle était nommée.
On peut connaître son SID grâce à la constante de même nom, ou par la fonction session_id().
13.3.2 Utilisation
13.3.2.1 Ouverture
Si dans PHP.INI la valeur « session.auto_start » est activée, les sessions sont démarrées de manière
automatique   lors   de   l'accès   à   une   page.   Sinon   il   faut   utiliser   explicitement   la   fonction
session_start(). Son appel créé une session ou restaure une session précédemment stockée sur le
serveur.
ATTENTION : L'ouverture d'une session doit obligatoirement apparaître avant toute
sortie/affichage du script PHP ou de balises HTML, même une ligne vide !
On peut créer ou récupérer une session nommée en précisant un session_name() qui prend comme
paramètre le nom de la session qui doit être créée (premier appel) ou accédée (appels suivants). La
session par défaut  se nomme « PHPSESSID » et c'est  celle-là qui  est  chargée si  session_name()
n'est pas appelée. Il faut donc appeler session_name() AVANT session_start() pour accéder à une
session nommée.
Une   session   peut   aussi   être   indirectement   créée   ou   ouverte   avec   l'utilisation   de   la   fonction
session_register().
13.3.2.2 Variables de session
Il y a deux moyens de créer des variables de session, qui seront accessibles depuis n'importe quelle
page visitée à partir du moment ou session_start() a été appelée. Le premier moyen ne fonctionne ne
fonctionne pas si register_globals est à off dans PHP.INI :
Méthode 1 (déconseillée) :
S. ROHAUT Cours Programmation PHP Page 64/93La  fonction  session_register()  prend comme paramètre un nom de variable et   la définit  comme
variable de session. Cette variable peut ensuite être accédée par son nom.
$txt='Bonjour les amis';
session_register('txt'); // txt devient une variable de session.
Pour   savoir   si   une   variable   est   enregistrée   dans   la   session   courante,   on   utilise
session_is_registered().
if(session_is_registered('txt')) echo $txt;
Pour supprimer une variable de session, il faut utiliser  session_unregister(). Par contre il ne faut
pas oublier d'utiliser  unset()  pour supprimer la variable globale,  car la précédente fonction ne la
supprime pas, elle empêche seulement sa sauvegarde à la fin du script.
if(session_is_registered('txt')) {
 session_unregister('txt');
 unset($txt);
}
Méthode 2 (La meilleure à utiliser) :
On utilise tout simplement le tableau global $_SESSION. Ainsi :
$_SESSION['txt']="Bonjour les amis";
crée la variable de session txt,
echo $_SESSION['txt']
l'affiche et
unset($_SESSION['txt']);
l'efface. Pour effacer toutes les variables de sessions, il suffit de faire
$_SESSION=array();
13.3.3 Expiration de la session
La durée de vie d'une session PHP dépend de trois paramètres de configuration du fichier PHP.INI :
session.gc_maxlifetime, session.cookie_lifetime et  session.cache_expire. Le premier concerne la
durée de vie des données sur le serveur, en nombre de secondes. Il est par défaut de 1440 secondes,
soit 24 minutes. Au delà, les données sont supprimées et elles seront rechargées via le cookie de
session lors du prochain appel.
Le second est la durée de vie du cookie de session, exprimé en secondes. Par défaut la valeur est
zéro (0) ce qui signifie : jusqu'à ce que le navigateur soit éteind.
Le troisième est la durée de vie des données de session, en minutes. Sa valeur par défaut est de 180
minutes, soit trois heures. Ce qui veut dire que dans une même session, on peut rester trois heures
sur la même page, les valeurs ne sont pas perdues. Au delà, il faut rouvrir une nouvelle session et
S. ROHAUT Cours Programmation PHP Page 65/93restaurer   de   nouvelles   valeurs.   A   chaque   chargement   de   page   (ouverture   de   session),   on
recommence le décompte.
On peut modifier le délai d'expiration de la session grâce à la fonction session_cache_expire() qui
prend comme valeur la nouvelle durée en minutes. Sans paramètre elle retourne la valeur actuelle.
13.3.4 Changer l'accès par défaut
PHP sait très bien se débrouiller tout seul mais on peut remplacer la prise en charge par défaut des
sessions par  ses propres  fonctions,  dans  le but  de gérer  l'ouverture et   la  fermeture ou encore  la
sauvegarde des données de session dans un fichier ou une base de données.
Une autre utilisation peut être le traçage via PHP de toutes les ouvertures/fermetures des sessions.
Pour  ça on utilise  la fonction  session_set_save_handler().  Son étude dépasse  le cadre du cours
mais voici un exemple tiré de la documentation PHP.
if(!mysql_table_exists("sessions",$DB)) {
 $query = 'CREATE TABLE sessions
 (
  SessionID    char(255)  not null,
  LastUpdated  datetime    not null,
  DataValue    text,
  PRIMARY KEY ( SessionID ),
  INDEX ( LastUpdated )
 )';
 mysql_query($query);
}
                            
function sessao_open($aSavaPath, $aSessionName){
 global $aTime;
 sessao_gc( $aTime );
 return True;
}
function sessao_close(){
 return True;
}
function sessao_read( $aKey ) {
 $query = "SELECT DataValue FROM sessions WHERE SessionID='$aKey'";
 $busca = mysql_query($query);
 if(mysql_num_rows($busca) == 1) {
  $r = mysql_fetch_array($busca);
  return $r['DataValue'];
 } ELSE {
  $query = "INSERT INTO sessions (SessionID, LastUpdated, DataValue)
            VALUES ('$aKey', NOW(), '')";
  mysql_query($query);
  return "";
 }
}
function sessao_write( $aKey, $aVal ) {
 $aVal = addslashes( $aVal );
 $query = "UPDATE sessions SET DataValue = '$aVal', LastUpdated = NOW()
WHERE SessionID = '$aKey'";
 mysql_query($query);
 return True;
S. ROHAUT Cours Programmation PHP Page 66/93}
function sessao_destroy( $aKey ) {
 $query = "DELETE FROM sessions WHERE SessionID = '$aKey'";
 mysql_query($query);
 return True;
}
function sessao_gc( $aMaxLifeTime )
{
 $query = "DELETE FROM sessions WHERE UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP
(LastUpdated) > $aMaxLifeTime";
 mysql_query($query);
 return True;
}
session_set_save_handler("sessao_open", "sessao_close", "sessao_read",
 "sessao_write", "sessao_destroy", "sessao_gc");

Aucun commentaire:

Enregistrer un commentaire