begin process at 2012 02 11 02:06:19
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Tutoriaux

 > TUTORIAL : TOUS LES SECRETS DES SESSIONS ET DES COOKIES EN PHP

TUTORIAL : TOUS LES SECRETS DES SESSIONS ET DES COOKIES EN PHP


 Information sur la source

Note :
6,94 / 10 - par 17 personnes
6,94 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Tutoriaux Niveau :Débutant Date de création :06/10/2004 Date de mise à jour :07/10/2004 00:09:58 Vu :47 502

Auteur : Magidev

Ecrire un message privé
Site perso
Commentaire sur cette source (22)
Ajouter un commentaire et/ou une note

 Description

Ceci est la traduction d'un tutorial de Zend Company, traduit de l'anglais.

SESSIONS ET COOKIES SOUS PHP : LES SECRETS
************************************

Par : Vikram Vaswani (Zend company)
Traduit de l'anglais par Magidev (magidev@hotmail.com)


La première session
Un des exemples standards utilisés pour démontrer comment fonctionne un session, est une application d'incrémentation de compteur. C'est un simple compteur qui initialise

une variable la première fois que vous visitez une page web et qui s'incrémente a chaque fois que vous rechargez la page. La variable compteur est stocké dans une session,

ce qui signifie que si vous naviguez sur un autre site web et que vous retournez sur cette page, la valeur du compteur sera restaurée (aussi longtemps que vous ne détruisez

pas la session en fermant le navigateur.

Regardez ce code :

<?php

// démarrer une session
session_start();

// incrémenter le compteur
$_SESSION['counter']++;

// montrer le résultat à l'écran
echo "Vous avez vu " . $_SESSION['counter'] . " fois cette page";

?>

Pour voir comment ca marche, appelez le script plusieurs fois depuis votre navigateur. Vous remarquez que le compteur monte de 1 a chaque rechargement. Si vous ouvrez

deux fenetre de votre navigateur, et que vous ouvrez la meme page, PHP maintiendra et incrémentera la meme session individuelle pour les deux fenêtres. L'ID de session

est utilisé pour identifier quel client a fait quelle requête, et recréer la priorité de chaque environnement sauvegardé pour chaque session individuelle. Cela veut également

dire que si vous visitez un (ou plusieurs) autre sites durant la même session et que vous retournez à votre script sans fermer votre navigateur entre temps, votre ancienne

session sera retrouvée et récrée pour vous.

Chaque session en PHP commence avec la fonction d'appel de session session_start(). Cette fonction vérifie si une session n'existe pas déja et la restore (si elle la trouve) ou

en recréer une (si elle n'existe pas). Les variables session peuvent etre enregistrées en utilisant le tableau superglobal $_SESSION, et peut etre appelé a n'importe quel

moment durant la session en utilisant les spécification de tableau classiques. Dans l'exemple ci-dessus, une clé nommée counter a été ajoutée au tableau $_SESSION. La

première fois qu'une session est crée, cette clé à obtenu la valeur 0. A chaque appel de la même session, la valeur précédente du compteur est retrouvée et incrémentée de

1.

Si l'exemple ne fonctionne pas comme expliqué, vérifiez que la variabe session.save_path de votre fichier php.ini pointe sur un dossier temporaire valide sur votre système.

Cette valeur est attribuée par défaut sur /tmp, mais si vous désirez essayer cet exemple sous un système Windows, vous devrez editer cette valeur pour C:\Windows\temp\

(où un dossier temporaire sur votre système)


Rappelez-moi
Voici un autre exemple, celui-ci demande a l'utilisateur de s'identifier et stocke le login et l'heure de début de session dans deux variables. Cette information est utilisée pour

afficher le nombre total de minutes depuis lesquelles la session est active

<?php

// démarre la session
session_start();
?>
<html>
<head></head>
<body>

<?php
if (!isset($_SESSION['name']) && !isset($_POST['name'])) {
    // si aucune donnée, affiche le formulaire
?>
    <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
        <input type="text" name="name">
        <input type="submit" name="submit" value="Entrez votre nom">
    </form>
<?php
}
else if (!isset($_SESSION['name']) && isset($_POST['name'])) {
    // Si la session n'existe pas mais que le formulaire a été envoyé
    // Vérifie si le formulaire dispose de toutes les informations nécéssaires
    // et crée une nouvelle session
    if (!empty($_POST['name'])) {
        $_SESSION['name'] = $_POST['name'];
        $_SESSION['start'] = time();
        echo "Bienvenue, " . $_POST['name'] . ". Une nouvelle session à été activée pour vous. Cliquez <a href=" . $_SERVER['PHP_SELF'] . ">ici</a> pour actualiser.";
    }
    else {
        echo "ERREUR: Entrez votre nom!";
    }
}
else if (isset($_SESSION['name'])) {
    // Si un session existait déja
    // Calcule le temps passé entre les deux visites
    echo "Bienvenue a nouveau, " . $_SESSION['name'] . ". Cette session à été activée il y a " . round((time() - $_SESSION['start']) / 60) . " minute(s). Cliquez <a href=" .

$_SERVER['PHP_SELF'] . ">ici</a> pour afficher la page.";
}
?>
</body>
</html>

Dans cette exemple, la présence ou non de variable session est utilisée pour déterminer laquelle des trois options afficher. Le temps de départ de la session est aussi

enregistrée dans $_SESSION['start'] avec la fonction time(), qui retourne le nombre total de seconde entre le 1 Janvier 1970 et l'heure courante. La seconde étape calcule le

temps passé entre maintenant et le temps stocké dans $_SESSION['start'] et l'arrondi pour afficher le temps approximativement écoulé.

C'est important de noter que l'appel de session_start() DOIT apparaitre en premier, avant toute sortie générée par le scription (incluant que vous n'utilisez pas la fonction de

mise en cache des sorties PHP comme vous pouvez lire à http://www.php.net/manual/en/ref.outcontrol.php. Ceci est du fait que la fonction de maintient des sessions dans

PHP utilise des cookies mémoires pour gérer les sessions, et les en-tête de cookies doivent etre transmises avant quelque sortie client qu'il soit. Si vous voyez une erreur

comme celle-ci dans les pages utilisant vos sessions :

Warning: Cannot send session cache limiter - headers already sent (output started at ...)

c'est probablement que quelque part, d'un manière ou d'une autre, des sorties ont été trouvées avant l'appel du session_start(). Parfois un retour charriot ou un espace

blanc en dehors des balises php entourant le session_start() peut causer l'erreur, donc soyez vigilant.


Comme dit précédement, chaque session possède un ID de session unique, que PHP utilise pour garder les valeurs de chaque client. Cet ID de session est une longue chaine

alphanumérique automatiquement passée par PHP depuis la page qui utilise les sessions. Pour voir a quoi cela ressemble, utilisez la fonction session_id(), comme dans ce

simple exemple :

<?php

// démarrer la session
session_start();

// afficher l'ID de session
echo "Je traque votre ID de session : " . session_id();

?>

Quand l'utilisateur ferme son navigateur et détruit les sessions, le tableau $_SESSION est vidé de toutes ses valeurs et variables. Vous pouvez également détruire vous

même une session, par exemple quand l'utilisateur se déconnecte (ndlr: Il clique sur un lien Fermer la session) en appelant la fonction session_destroy(), comme dans

l'exemple suivant :

<?php

// démarrer la session
session_start();

// et la détruire
session_destroy();

?>

Dans ce cas, vous vous demandez si ce que vous lisez ci-dessus est exact... Oui ! Avant d'appeler la fonction session_destroy() vous devez d'abord rappeler la fonction

session_start() pour recupérer la session courante.

RAPPELEZ-VOUS : $_SESSION est un tableau superglobal, et vous pouvez utiliser toutes les fonctions internes et externes sans le déclarer comme global au préalable. Dans

le simple exemple suivant, vous allez voir :

<?php

// démarrer la session
session_start();

// cette fonction vérifie le contenu d'une valeur de la session
// et retourne true ou false
function isAdmin() {
    if ($_SESSION['name'] == 'admin') {
        return true;
    }
    else {
        return false;
    }
}

// attribue la valeur a $_SESSION['name']
$_SESSION['name'] = "guessme";
// appel la fonction en utilisant la variable session
// retourne faux ici
echo isAdmin()."<br />";

// attribue la valeur a r $_SESSION['name']
$_SESSION['name'] = "admin";
// appel la fonction en utilisant la variable session
// retourne vrai ici
echo isAdmin()."<br />";

?>

Vous pouvez en lire plus a propos des sessions et de leur maintient a http://www.php.net/manual/en/ref.session.php.

Règles du jeu
Une session fonctionne en utilisant un cookie mémoire, ce qui explique qu'il n'est disponible que tant que une fenetre de navigateur est toujours active. Quand le navigateur

est éteint, la mémoire allouée au cookie est vidée et la session détruitre. Si vous voulez utiliser des cookies de plus longue durée, vous devez utiliser les fonction PHP de

cookies pour écrire un cookie sur le disque dur de l'utilisateur, et le relire au besoin.

Avant de commence à utiliser les cookies, il y a quelques points sur lequels il faut etre vigilant :

Quand les cookies sont utilisée pour enregistrer les valeurs d'un certain domaine, ils ne peuvent etre relus que par le domaine qui les à crées (ndlr : Domaine = l'adresse

web, le domaine propriétaire)
Un même domaine ne peut créer plus de 20 cookies, et chaque cookie est limité à la taille de 4 KB
Un cookie possède habituellement six attributs, le premier est le mandataire. Il y a :
name : le nom du cookie
value : la valeur du cookie
expires : la date et l'heure a laquelle le cookie expire
path : le dossier dans lequel le domaine peut accéder au cookie
domain : le domaine dans lequel le cookie est valide
secure : un marqueur booléen indiquant si le cookie ne peut etre transmit que pas connexion sécurisée

Plus d'informations sur les cookies peuvent être obtenus depuis Netscape, les personnes qui les ont inventée. Visitez http://www.netscape.com/newsref/std/cookie_spec.ht ml

pour connaitre les spécificiations Netscape.

C'est important de se rappeler que, quand le cookie est écrit chez l'utilisateur, vous êtes le programmeur qui a le plus petit contrôle de ceux-ci. Si un utilisateur décide de

désactiver les cookies dans son navigateur, vos cookies ne seront simplement pas sauvegardés.

Maintenant que vous savez cela, jetons un oeil sur l'utilisation des cookies dans PHP


Retrouver de vieux amis
PHP offre une seule fonction manipulant les cookies : setcookie(). Cette fonction vous autorise a lire et ecrire des cookies, comme dans l'exemple :


<?php

if (!isset($_COOKIE['visited'])) {
    // si le cookie n'existe pas
    // on le crée
    setcookie("visited", "1", mktime()+86400, "/") or die("Impossible d'écrire le Cookie");
    echo "C'est votre première visite aujourd'hui";
}
else {
    // Si le cookie existe
    echo "Heureux de vous revoir mon viel ami !";
}

?>

Pour voir comment cela fonctionne, appelez votre pages plusieurs fois, La premiere fois, parceque le cookie n'existait pas encore, le premier message est affiché, mais pour

la suite, le client reconnait le cookie déja écrit et affiche le second message.

NOTE : Ceci fonctionne meme si vous fermez le navigateur entre temps, voila la différence avec les sessions

La fonction setcookie() accepte 6 arguments : le nom du cookie, sa valeur, sa date d'expiration, le domaine, le dossier pour le quel c'est valable et une valeur booléene

indiquant si le cookie peut ou non etre transmis par le biais de protocoles HTTP non sécurisés. Comme expliqué précédement, seulement le nom et la valeur sont

nécéssaires, les autres sont facultatifs

La valeur des cookies est automatiquement envoyée au client et convertis en une paire de CLEF-VALEUR dans la variable $_COOKIE, comme un tableau superglobal identique

a $_SESSION. Les valeur peuvent etre retrouvées grace à la notation standard des tableaux, comme dans l'exemple ci-dessus. NOTE : Comme pour les sessions vous devez

appeler la fonction setcookie() avant toute sortie, sinon vous aurez l'erreur suivante :

Warning: Cannot add header information - headers already sent by (output started at ... )


Formulaire et Fonction
Voici un exemple un peu plus complexe:

<?php

if (!isset($_POST['email'])) {
    // si le formulaire n'a pas ete envoye
    // affiche le
    // si le cookie existe, pre rempli le formulaire avec ses valeurs
?>
    <html>
    <head></head>
    <body>
    
    <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
        Enter your email address: <input type="text" name="email" value="<?php echo $_COOKIE['email']; ?>">
        <input type="submit" name="submit">
        <?php
        // calcule egalement le temps depuis le dernier envoi
        if ($_COOKIE['lastsave']) {
            $days = round((time() - $_COOKIE['lastsave']) / 86400);
            echo "<br /> $days jour(s) depuis votre dernier envoi";
        }
        ?>
    </form>
    
    </body>
    </html>
<?php
}
else {
    // le formulaire a été envoyé
    // rempli le cookie avec les données du formulaire et du timestamp
    // le cookie expire dans 30 jours
    if (!empty($_POST['email'])) {
        setcookie("email", $_POST['email'], mktime()+(86400*30), "/");
        setcookie("lastsave", time(), mktime()+(86400*30), "/");
        echo "Votre email à été enregistrée.";
    }
    else {
        echo "ERREUR: Entrez votre adresse email!";
    }
}
?>
</body>
</html>

Dans ce cas, les valeurs entrées dans la feuille sont stockés dans une cookie appelé email, et automatiquement retrouvée pour pré-remplir le formulaire avant la requete.

Cette technique est fréquement utlisée par les sites qui requièrent un login et un mot de passe, pré-remplissant ainsi le nom d'utilisateur dans la boite de login avec la valeur

stocké dans le cookie depuis la dernière identification réusssie.

Cet exemple démontre également comme stocker plus d'un cookie par domaine, en appelant setcookie() plusieurs fois. Dans l'exemple ci-dessus, le temps que prend

l'utilisateur pour remplir le formulaire est stocké dans un second cookie pour calculer le temps entre deux entrées.

Pour supprimer un cookie chez le client, appelez simplement setcookie() avec la meme syntaxe, mais définissez une date de validité dans le passé. Cela provoque la

suppression du cookie chez le client. Voici un exemple :

<?php

// supprime un cookie
setcookie("lastsave", NULL, mktime() - 3600, "/");

?>

Lisez-en plus a propos des cookies et de la fonction setcookie a : http://www.php.net/manual/en/features.cookies.php et

http://www.php.net/manual/en/function.setcookie. php.

Accès autorisé
Comme je l'ai dit au début de ce tutorial, les cookies et les sessions sont deux modes différents pour stocker des données "persistantes" chez le client. Une session retient les

données pour le temps d'une session, un cookie retient les données pour autant de temps que vous avez besoin. En sachant cela, jetons un oeil sur l'exemple suivant, qui

utilise conjointement les deux méthodes :

L'application est une simple identification. Avec certaines pages visibles seulement aux utilisateur identifées avec succès. Les utilisateurs non identifées avec un mot de passe

valide sont redirigés vers une page d'erreur spéciale. La liste des noms d'utilisateurs et des mots de passe sont stockés dans une base MySQL et php vérifie si il peut

accorder ou non l'accès

The application here is a simple user authentication system, where certain pages can only be viewed by users who successfully log in to the system. Users who have not

been authenticated with a valid password are denied access to these "special" pages. The list of valid usernames and passwords is stored in a MySQL database, and PHP is

used to verify a user's credentials and decide whether or not to grant access.

On présume qu'une table comme ceci existe :

+-------+--------------------------------------- --------+
| name  | pass                                          |
+-------+--------------------------------------- --------+
| sue   | 9565d44fd0fe4db59f073eea1db70f3ea258e10b      |
| harry | 6e74234b8b552685113b53c7bff0f386c8cef8cf      |
| louis | 6817dda51b64b8190029490d2811a4d9cb9cd432      |
| sam   | bd17f8243e771a57cfbb06aa9a82bbf09fd2d90b      |
| james | 792ec9b44d432c947ac6775b2b52326e9d08512f      |
+-------+--------------------------------------- --------+

avec un champ unique de nom d'utilisateur et un mot de passe crée avec la fonction SHA1(). Ici php va faire le gros du travail :

<?php

if (isset($_POST['name']) || isset($_POST['pass'])) {
    // formulaire recu
    // verifie les valeurs
    if (empty($_POST['name'])) {
        die ("ERREUR: Entrez un nom d'utilisateur!");
    }
    if (empty($_POST['pass'])) {
        die ("ERREUR: Veuillez entrer un mot de passe!");
    }

    // Defini les variable d'acces au serveur mySQL
    $host = "localhost";
    $user = "test";
    $pass = "test";
    $db = "db2";
    
    // Ouvre la connexion
    $connection = mysql_connect($host, $user, $pass) or die ("Unable to connect!");
    
    // Selectionne la base
    mysql_select_db($db) or die ("Unable to select database!");
    
    // Construit la requete
    $query = "SELECT * FROM users WHERE name = '" . $_POST['name'] . "' AND pass = SHA1('" . $_POST['pass'] . "')";
    
    // Execute la requete
    $result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());
    
    // Regarde les valeurs retournees par la base
    if (mysql_num_rows($result) == 1) {
        // si une ligne est retournee,
        // l'authentification est bonne
        // crée le cookie avec le nom d'utilisateur et la session
        session_start();
        $_SESSION['auth'] = 1;
        setcookie("username", $_POST['name'], time()+(84600*30));
        echo "Acces autorisé !";
    }
    else {
        // pas de résultat
        // authentification impossible
        echo "ERREUR: Login ou Mot de passe incorrect!";
    }
    
    // Libere le resultat
    mysql_free_result($result);
    
    // Ferme la connexion
    mysql_close($connection);
}
else {
    // pas d'envoi
    // affiche le formulaire
?>
    <html>
    <head></head>
    <body>
    <center>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    Username <input type="text" name="name" value="<?php echo $_COOKIE['username']; ?>">
    <p />
    Password <input type="password" name="pass">
    <p />
    <input type="submit" name="submit" value="Log In">
    </center>
    </body>
    </html>
<?php
}

?>

Ici, les valeurs entrées dans la boite de login sont intégrée dans une requete mySQL, qui est executée sur la table user. Si le nom et le mot de passe correspondent, un seul

enregistrement est retourné, indiquant que l'authentification est accordée, si aucun enregistrement n'est retourné, c'est que l'authentification a échou

Quand l'authentification reussi, une session est créer : $_SESSION['auth'] est créer et assigné a la valeur booléene true, et le nom d'utilisateur est stocké dans un cookie
pour la prochaine fois, le cookie dure 30 jours, et est utilisé pour pré-remplir le champ Login pour la fois suivante.

Bien sur ce n'est pas assez, il faut maintenant bloquer les pages interdites si l'utilisateur n'est pas identifiée. Sans cela, n'importe qui peut passer la sécurité en tapant

simplement l'adresse de la page dans l'URL.

Maintenant, pour protéger une page, il suffit de vérifier que la variable $_SESSION['auth'] existe et d'autoriser l'acces ou non

<?php

// start session
session_start();
if (!$_SESSION['auth'] == 1) {
    // verifie si l'autorisation est la
    // sinon die avec erreur
    die ("ERREUR: Acces interdit!");
}
else {
?>
    <html>
    <head></head>
    <body>
    Ceci est une page sécurisée. Vous pouvez seulement la voir si $_SESSION['auth'] = 1
    </body>
    </html>
<?php
}

?>

Chouette non ? Seul les utilisateurs loggés sont autorisés a voir cette page, parceque leur clients on la session $_SESSION['auth'] a la valeur 1 en mémoire. Tout les autres

auront la page d'erreur.

Voici la fin de ce tutorial.


Source

  • SESSIONS ET COOKIES SOUS PHP : LES SECRETS
  • ************************************
  • Par : Vikram Vaswani (Zend company)
  • Traduit de l'anglais par Magidev (magidev@hotmail.com)
  • La première session
  • Un des exemples standards utilisés pour démontrer comment fonctionne un session, est une application d'incrémentation de compteur. C'est un simple compteur qui initialise
  • une variable la première fois que vous visitez une page web et qui s'incrémente a chaque fois que vous rechargez la page. La variable compteur est stocké dans une session,
  • ce qui signifie que si vous naviguez sur un autre site web et que vous retournez sur cette page, la valeur du compteur sera restaurée (aussi longtemps que vous ne détruisez
  • pas la session en fermant le navigateur.
  • Regardez ce code :
  • <?php
  • // démarrer une session
  • session_start();
  • // incrémenter le compteur
  • $_SESSION['counter']++;
  • // montrer le résultat à l'écran
  • echo "Vous avez vu " . $_SESSION['counter'] . " fois cette page";
  • ?>
  • Pour voir comment ca marche, appelez le script plusieurs fois depuis votre navigateur. Vous remarquez que le compteur monte de 1 a chaque rechargement. Si vous ouvrez
  • deux fenetre de votre navigateur, et que vous ouvrez la meme page, PHP maintiendra et incrémentera la meme session individuelle pour les deux fenêtres. L'ID de session
  • est utilisé pour identifier quel client a fait quelle requête, et recréer la priorité de chaque environnement sauvegardé pour chaque session individuelle. Cela veut également
  • dire que si vous visitez un (ou plusieurs) autre sites durant la même session et que vous retournez à votre script sans fermer votre navigateur entre temps, votre ancienne
  • session sera retrouvée et récrée pour vous.
  • Chaque session en PHP commence avec la fonction d'appel de session session_start(). Cette fonction vérifie si une session n'existe pas déja et la restore (si elle la trouve) ou
  • en recréer une (si elle n'existe pas). Les variables session peuvent etre enregistrées en utilisant le tableau superglobal $_SESSION, et peut etre appelé a n'importe quel
  • moment durant la session en utilisant les spécification de tableau classiques. Dans l'exemple ci-dessus, une clé nommée counter a été ajoutée au tableau $_SESSION. La
  • première fois qu'une session est crée, cette clé à obtenu la valeur 0. A chaque appel de la même session, la valeur précédente du compteur est retrouvée et incrémentée de
  • 1.
  • Si l'exemple ne fonctionne pas comme expliqué, vérifiez que la variabe session.save_path de votre fichier php.ini pointe sur un dossier temporaire valide sur votre système.
  • Cette valeur est attribuée par défaut sur /tmp, mais si vous désirez essayer cet exemple sous un système Windows, vous devrez editer cette valeur pour C:\Windows\temp\
  • (où un dossier temporaire sur votre système)
  • Rappelez-moi
  • Voici un autre exemple, celui-ci demande a l'utilisateur de s'identifier et stocke le login et l'heure de début de session dans deux variables. Cette information est utilisée pour
  • afficher le nombre total de minutes depuis lesquelles la session est active
  • <?php
  • // démarre la session
  • session_start();
  • ?>
  • <html>
  • <head></head>
  • <body>
  • <?php
  • if (!isset($_SESSION['name']) && !isset($_POST['name'])) {
  • // si aucune donnée, affiche le formulaire
  • ?>
  • <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
  • <input type="text" name="name">
  • <input type="submit" name="submit" value="Entrez votre nom">
  • </form>
  • <?php
  • }
  • else if (!isset($_SESSION['name']) && isset($_POST['name'])) {
  • // Si la session n'existe pas mais que le formulaire a été envoyé
  • // Vérifie si le formulaire dispose de toutes les informations nécéssaires
  • // et crée une nouvelle session
  • if (!empty($_POST['name'])) {
  • $_SESSION['name'] = $_POST['name'];
  • $_SESSION['start'] = time();
  • echo "Bienvenue, " . $_POST['name'] . ". Une nouvelle session à été activée pour vous. Cliquez <a href=" . $_SERVER['PHP_SELF'] . ">ici</a> pour actualiser.";
  • }
  • else {
  • echo "ERREUR: Entrez votre nom!";
  • }
  • }
  • else if (isset($_SESSION['name'])) {
  • // Si un session existait déja
  • // Calcule le temps passé entre les deux visites
  • echo "Bienvenue a nouveau, " . $_SESSION['name'] . ". Cette session à été activée il y a " . round((time() - $_SESSION['start']) / 60) . " minute(s). Cliquez <a href=" .
  • $_SERVER['PHP_SELF'] . ">ici</a> pour afficher la page.";
  • }
  • ?>
  • </body>
  • </html>
  • Dans cette exemple, la présence ou non de variable session est utilisée pour déterminer laquelle des trois options afficher. Le temps de départ de la session est aussi
  • enregistrée dans $_SESSION['start'] avec la fonction time(), qui retourne le nombre total de seconde entre le 1 Janvier 1970 et l'heure courante. La seconde étape calcule le
  • temps passé entre maintenant et le temps stocké dans $_SESSION['start'] et l'arrondi pour afficher le temps approximativement écoulé.
  • C'est important de noter que l'appel de session_start() DOIT apparaitre en premier, avant toute sortie générée par le scription (incluant que vous n'utilisez pas la fonction de
  • mise en cache des sorties PHP comme vous pouvez lire à http://www.php.net/manual/en/ref.outcontrol.php. Ceci est du fait que la fonction de maintient des sessions dans
  • PHP utilise des cookies mémoires pour gérer les sessions, et les en-tête de cookies doivent etre transmises avant quelque sortie client qu'il soit. Si vous voyez une erreur
  • comme celle-ci dans les pages utilisant vos sessions :
  • Warning: Cannot send session cache limiter - headers already sent (output started at ...)
  • c'est probablement que quelque part, d'un manière ou d'une autre, des sorties ont été trouvées avant l'appel du session_start(). Parfois un retour charriot ou un espace
  • blanc en dehors des balises php entourant le session_start() peut causer l'erreur, donc soyez vigilant.
  • Comme dit précédement, chaque session possède un ID de session unique, que PHP utilise pour garder les valeurs de chaque client. Cet ID de session est une longue chaine
  • alphanumérique automatiquement passée par PHP depuis la page qui utilise les sessions. Pour voir a quoi cela ressemble, utilisez la fonction session_id(), comme dans ce
  • simple exemple :
  • <?php
  • // démarrer la session
  • session_start();
  • // afficher l'ID de session
  • echo "Je traque votre ID de session : " . session_id();
  • ?>
  • Quand l'utilisateur ferme son navigateur et détruit les sessions, le tableau $_SESSION est vidé de toutes ses valeurs et variables. Vous pouvez également détruire vous
  • même une session, par exemple quand l'utilisateur se déconnecte (ndlr: Il clique sur un lien Fermer la session) en appelant la fonction session_destroy(), comme dans
  • l'exemple suivant :
  • <?php
  • // démarrer la session
  • session_start();
  • // et la détruire
  • session_destroy();
  • ?>
  • Dans ce cas, vous vous demandez si ce que vous lisez ci-dessus est exact... Oui ! Avant d'appeler la fonction session_destroy() vous devez d'abord rappeler la fonction
  • session_start() pour recupérer la session courante.
  • RAPPELEZ-VOUS : $_SESSION est un tableau superglobal, et vous pouvez utiliser toutes les fonctions internes et externes sans le déclarer comme global au préalable. Dans
  • le simple exemple suivant, vous allez voir :
  • <?php
  • // démarrer la session
  • session_start();
  • // cette fonction vérifie le contenu d'une valeur de la session
  • // et retourne true ou false
  • function isAdmin() {
  • if ($_SESSION['name'] == 'admin') {
  • return true;
  • }
  • else {
  • return false;
  • }
  • }
  • // attribue la valeur a $_SESSION['name']
  • $_SESSION['name'] = "guessme";
  • // appel la fonction en utilisant la variable session
  • // retourne faux ici
  • echo isAdmin()."<br />";
  • // attribue la valeur a r $_SESSION['name']
  • $_SESSION['name'] = "admin";
  • // appel la fonction en utilisant la variable session
  • // retourne vrai ici
  • echo isAdmin()."<br />";
  • ?>
  • Vous pouvez en lire plus a propos des sessions et de leur maintient a http://www.php.net/manual/en/ref.session.php.
  • Règles du jeu
  • Une session fonctionne en utilisant un cookie mémoire, ce qui explique qu'il n'est disponible que tant que une fenetre de navigateur est toujours active. Quand le navigateur
  • est éteint, la mémoire allouée au cookie est vidée et la session détruitre. Si vous voulez utiliser des cookies de plus longue durée, vous devez utiliser les fonction PHP de
  • cookies pour écrire un cookie sur le disque dur de l'utilisateur, et le relire au besoin.
  • Avant de commence à utiliser les cookies, il y a quelques points sur lequels il faut etre vigilant :
  • Quand les cookies sont utilisée pour enregistrer les valeurs d'un certain domaine, ils ne peuvent etre relus que par le domaine qui les à crées (ndlr : Domaine = l'adresse
  • web, le domaine propriétaire)
  • Un même domaine ne peut créer plus de 20 cookies, et chaque cookie est limité à la taille de 4 KB
  • Un cookie possède habituellement six attributs, le premier est le mandataire. Il y a :
  • name : le nom du cookie
  • value : la valeur du cookie
  • expires : la date et l'heure a laquelle le cookie expire
  • path : le dossier dans lequel le domaine peut accéder au cookie
  • domain : le domaine dans lequel le cookie est valide
  • secure : un marqueur booléen indiquant si le cookie ne peut etre transmit que pas connexion sécurisée
  • Plus d'informations sur les cookies peuvent être obtenus depuis Netscape, les personnes qui les ont inventée. Visitez http://www.netscape.com/newsref/std/cookie_spec.html
  • pour connaitre les spécificiations Netscape.
  • C'est important de se rappeler que, quand le cookie est écrit chez l'utilisateur, vous êtes le programmeur qui a le plus petit contrôle de ceux-ci. Si un utilisateur décide de
  • désactiver les cookies dans son navigateur, vos cookies ne seront simplement pas sauvegardés.
  • Maintenant que vous savez cela, jetons un oeil sur l'utilisation des cookies dans PHP
  • Retrouver de vieux amis
  • PHP offre une seule fonction manipulant les cookies : setcookie(). Cette fonction vous autorise a lire et ecrire des cookies, comme dans l'exemple :
  • <?php
  • if (!isset($_COOKIE['visited'])) {
  • // si le cookie n'existe pas
  • // on le crée
  • setcookie("visited", "1", mktime()+86400, "/") or die("Impossible d'écrire le Cookie");
  • echo "C'est votre première visite aujourd'hui";
  • }
  • else {
  • // Si le cookie existe
  • echo "Heureux de vous revoir mon viel ami !";
  • }
  • ?>
  • Pour voir comment cela fonctionne, appelez votre pages plusieurs fois, La premiere fois, parceque le cookie n'existait pas encore, le premier message est affiché, mais pour
  • la suite, le client reconnait le cookie déja écrit et affiche le second message.
  • NOTE : Ceci fonctionne meme si vous fermez le navigateur entre temps, voila la différence avec les sessions
  • La fonction setcookie() accepte 6 arguments : le nom du cookie, sa valeur, sa date d'expiration, le domaine, le dossier pour le quel c'est valable et une valeur booléene
  • indiquant si le cookie peut ou non etre transmis par le biais de protocoles HTTP non sécurisés. Comme expliqué précédement, seulement le nom et la valeur sont
  • nécéssaires, les autres sont facultatifs
  • La valeur des cookies est automatiquement envoyée au client et convertis en une paire de CLEF-VALEUR dans la variable $_COOKIE, comme un tableau superglobal identique
  • a $_SESSION. Les valeur peuvent etre retrouvées grace à la notation standard des tableaux, comme dans l'exemple ci-dessus. NOTE : Comme pour les sessions vous devez
  • appeler la fonction setcookie() avant toute sortie, sinon vous aurez l'erreur suivante :
  • Warning: Cannot add header information - headers already sent by (output started at ... )
  • Formulaire et Fonction
  • Voici un exemple un peu plus complexe:
  • <?php
  • if (!isset($_POST['email'])) {
  • // si le formulaire n'a pas ete envoye
  • // affiche le
  • // si le cookie existe, pre rempli le formulaire avec ses valeurs
  • ?>
  • <html>
  • <head></head>
  • <body>
  • <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
  • Enter your email address: <input type="text" name="email" value="<?php echo $_COOKIE['email']; ?>">
  • <input type="submit" name="submit">
  • <?php
  • // calcule egalement le temps depuis le dernier envoi
  • if ($_COOKIE['lastsave']) {
  • $days = round((time() - $_COOKIE['lastsave']) / 86400);
  • echo "<br /> $days jour(s) depuis votre dernier envoi";
  • }
  • ?>
  • </form>
  • </body>
  • </html>
  • <?php
  • }
  • else {
  • // le formulaire a été envoyé
  • // rempli le cookie avec les données du formulaire et du timestamp
  • // le cookie expire dans 30 jours
  • if (!empty($_POST['email'])) {
  • setcookie("email", $_POST['email'], mktime()+(86400*30), "/");
  • setcookie("lastsave", time(), mktime()+(86400*30), "/");
  • echo "Votre email à été enregistrée.";
  • }
  • else {
  • echo "ERREUR: Entrez votre adresse email!";
  • }
  • }
  • ?>
  • </body>
  • </html>
  • Dans ce cas, les valeurs entrées dans la feuille sont stockés dans une cookie appelé email, et automatiquement retrouvée pour pré-remplir le formulaire avant la requete.
  • Cette technique est fréquement utlisée par les sites qui requièrent un login et un mot de passe, pré-remplissant ainsi le nom d'utilisateur dans la boite de login avec la valeur
  • stocké dans le cookie depuis la dernière identification réusssie.
  • Cet exemple démontre également comme stocker plus d'un cookie par domaine, en appelant setcookie() plusieurs fois. Dans l'exemple ci-dessus, le temps que prend
  • l'utilisateur pour remplir le formulaire est stocké dans un second cookie pour calculer le temps entre deux entrées.
  • Pour supprimer un cookie chez le client, appelez simplement setcookie() avec la meme syntaxe, mais définissez une date de validité dans le passé. Cela provoque la
  • suppression du cookie chez le client. Voici un exemple :
  • <?php
  • // supprime un cookie
  • setcookie("lastsave", NULL, mktime() - 3600, "/");
  • ?>
  • Lisez-en plus a propos des cookies et de la fonction setcookie a : http://www.php.net/manual/en/features.cookies.php et
  • http://www.php.net/manual/en/function.setcookie.php.
  • Accès autorisé
  • Comme je l'ai dit au début de ce tutorial, les cookies et les sessions sont deux modes différents pour stocker des données "persistantes" chez le client. Une session retient les
  • données pour le temps d'une session, un cookie retient les données pour autant de temps que vous avez besoin. En sachant cela, jetons un oeil sur l'exemple suivant, qui
  • utilise conjointement les deux méthodes :
  • L'application est une simple identification. Avec certaines pages visibles seulement aux utilisateur identifées avec succès. Les utilisateurs non identifées avec un mot de passe
  • valide sont redirigés vers une page d'erreur spéciale. La liste des noms d'utilisateurs et des mots de passe sont stockés dans une base MySQL et php vérifie si il peut
  • accorder ou non l'accès
  • The application here is a simple user authentication system, where certain pages can only be viewed by users who successfully log in to the system. Users who have not
  • been authenticated with a valid password are denied access to these "special" pages. The list of valid usernames and passwords is stored in a MySQL database, and PHP is
  • used to verify a user's credentials and decide whether or not to grant access.
  • On présume qu'une table comme ceci existe :
  • +-------+-----------------------------------------------+
  • | name | pass |
  • +-------+-----------------------------------------------+
  • | sue | 9565d44fd0fe4db59f073eea1db70f3ea258e10b |
  • | harry | 6e74234b8b552685113b53c7bff0f386c8cef8cf |
  • | louis | 6817dda51b64b8190029490d2811a4d9cb9cd432 |
  • | sam | bd17f8243e771a57cfbb06aa9a82bbf09fd2d90b |
  • | james | 792ec9b44d432c947ac6775b2b52326e9d08512f |
  • +-------+-----------------------------------------------+
  • avec un champ unique de nom d'utilisateur et un mot de passe crée avec la fonction SHA1(). Ici php va faire le gros du travail :
  • <?php
  • if (isset($_POST['name']) || isset($_POST['pass'])) {
  • // formulaire recu
  • // verifie les valeurs
  • if (empty($_POST['name'])) {
  • die ("ERREUR: Entrez un nom d'utilisateur!");
  • }
  • if (empty($_POST['pass'])) {
  • die ("ERREUR: Veuillez entrer un mot de passe!");
  • }
  • // Defini les variable d'acces au serveur mySQL
  • $host = "localhost";
  • $user = "test";
  • $pass = "test";
  • $db = "db2";
  • // Ouvre la connexion
  • $connection = mysql_connect($host, $user, $pass) or die ("Unable to connect!");
  • // Selectionne la base
  • mysql_select_db($db) or die ("Unable to select database!");
  • // Construit la requete
  • $query = "SELECT * FROM users WHERE name = '" . $_POST['name'] . "' AND pass = SHA1('" . $_POST['pass'] . "')";
  • // Execute la requete
  • $result = mysql_query($query) or die ("Error in query: $query. " . mysql_error());
  • // Regarde les valeurs retournees par la base
  • if (mysql_num_rows($result) == 1) {
  • // si une ligne est retournee,
  • // l'authentification est bonne
  • // crée le cookie avec le nom d'utilisateur et la session
  • session_start();
  • $_SESSION['auth'] = 1;
  • setcookie("username", $_POST['name'], time()+(84600*30));
  • echo "Acces autorisé !";
  • }
  • else {
  • // pas de résultat
  • // authentification impossible
  • echo "ERREUR: Login ou Mot de passe incorrect!";
  • }
  • // Libere le resultat
  • mysql_free_result($result);
  • // Ferme la connexion
  • mysql_close($connection);
  • }
  • else {
  • // pas d'envoi
  • // affiche le formulaire
  • ?>
  • <html>
  • <head></head>
  • <body>
  • <center>
  • <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
  • Username <input type="text" name="name" value="<?php echo $_COOKIE['username']; ?>">
  • <p />
  • Password <input type="password" name="pass">
  • <p />
  • <input type="submit" name="submit" value="Log In">
  • </center>
  • </body>
  • </html>
  • <?php
  • }
  • ?>
  • Ici, les valeurs entrées dans la boite de login sont intégrée dans une requete mySQL, qui est executée sur la table user. Si le nom et le mot de passe correspondent, un seul
  • enregistrement est retourné, indiquant que l'authentification est accordée, si aucun enregistrement n'est retourné, c'est que l'authentification a échou
  • Quand l'authentification reussi, une session est créer : $_SESSION['auth'] est créer et assigné a la valeur booléene true, et le nom d'utilisateur est stocké dans un cookie
  • pour la prochaine fois, le cookie dure 30 jours, et est utilisé pour pré-remplir le champ Login pour la fois suivante.
  • Bien sur ce n'est pas assez, il faut maintenant bloquer les pages interdites si l'utilisateur n'est pas identifiée. Sans cela, n'importe qui peut passer la sécurité en tapant
  • simplement l'adresse de la page dans l'URL.
  • Maintenant, pour protéger une page, il suffit de vérifier que la variable $_SESSION['auth'] existe et d'autoriser l'acces ou non
  • <?php
  • // start session
  • session_start();
  • if (!$_SESSION['auth'] == 1) {
  • // verifie si l'autorisation est la
  • // sinon die avec erreur
  • die ("ERREUR: Acces interdit!");
  • }
  • else {
  • ?>
  • <html>
  • <head></head>
  • <body>
  • Ceci est une page sécurisée. Vous pouvez seulement la voir si $_SESSION['auth'] = 1
  • </body>
  • </html>
  • <?php
  • }
  • ?>
  • Chouette non ? Seul les utilisateurs loggés sont autorisés a voir cette page, parceque leur clients on la session $_SESSION['auth'] a la valeur 1 en mémoire. Tout les autres
  • auront la page d'erreur.
  • Voici la fin de ce tutorial.
SESSIONS ET COOKIES SOUS PHP : LES SECRETS
************************************

Par : Vikram Vaswani (Zend company)
Traduit de l'anglais par Magidev (magidev@hotmail.com)


La première session
Un des exemples standards utilisés pour démontrer comment fonctionne un session, est une application d'incrémentation de compteur. C'est un simple compteur qui initialise 

une variable la première fois que vous visitez une page web et qui s'incrémente a chaque fois que vous rechargez la page. La variable compteur est stocké dans une session, 

ce qui signifie que si vous naviguez sur un autre site web et que vous retournez sur cette page, la valeur du compteur sera restaurée (aussi longtemps que vous ne détruisez 

pas la session en fermant le navigateur.

Regardez ce code :

<?php 

// démarrer une session
session_start(); 

// incrémenter le compteur
$_SESSION['counter']++; 

// montrer le résultat à l'écran
echo "Vous avez vu " . $_SESSION['counter'] . " fois cette page"; 

?> 

Pour voir comment ca marche, appelez le script plusieurs fois depuis votre navigateur. Vous remarquez que le compteur monte de 1 a chaque rechargement. Si vous ouvrez 

deux fenetre de votre navigateur, et que vous ouvrez la meme page, PHP maintiendra et incrémentera la meme session individuelle pour les deux fenêtres. L'ID de session 

est utilisé pour identifier quel client a fait quelle requête, et recréer la priorité de chaque environnement sauvegardé pour chaque session individuelle. Cela veut également 

dire que si vous visitez un (ou plusieurs) autre sites durant la même session et que vous retournez à votre script sans fermer votre navigateur entre temps, votre ancienne 

session sera retrouvée et récrée pour vous.

Chaque session en PHP commence avec la fonction d'appel de session session_start(). Cette fonction vérifie si une session n'existe pas déja et la restore (si elle la trouve) ou 

en recréer une (si elle n'existe pas). Les variables session peuvent etre enregistrées en utilisant le tableau superglobal $_SESSION, et peut etre appelé a n'importe quel 

moment durant la session en utilisant les spécification de tableau classiques. Dans l'exemple ci-dessus, une clé nommée counter a été ajoutée au tableau $_SESSION. La 

première fois qu'une session est crée, cette clé à obtenu la valeur 0. A chaque appel de la même session, la valeur précédente du compteur est retrouvée et incrémentée de 

1.

Si l'exemple ne fonctionne pas comme expliqué, vérifiez que la variabe session.save_path de votre fichier php.ini pointe sur un dossier temporaire valide sur votre système. 

Cette valeur est attribuée par défaut sur /tmp, mais si vous désirez essayer cet exemple sous un système Windows, vous devrez editer cette valeur pour C:\Windows\temp\ 

(où un dossier temporaire sur votre système)


Rappelez-moi
Voici un autre exemple, celui-ci demande a l'utilisateur de s'identifier et stocke le login et l'heure de début de session dans deux variables. Cette information est utilisée pour 

afficher le nombre total de minutes depuis lesquelles la session est active

<?php 

// démarre la session
session_start(); 
?> 
<html> 
<head></head> 
<body> 

<?php 
if (!isset($_SESSION['name']) && !isset($_POST['name'])) { 
    // si aucune donnée, affiche le formulaire
?> 
    <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post"> 
        <input type="text" name="name"> 
        <input type="submit" name="submit" value="Entrez votre nom"> 
    </form> 
<?php 
} 
else if (!isset($_SESSION['name']) && isset($_POST['name'])) { 
    // Si la session n'existe pas mais que le formulaire a été envoyé 
    // Vérifie si le formulaire dispose de toutes les informations nécéssaires
    // et crée une nouvelle session
    if (!empty($_POST['name'])) { 
        $_SESSION['name'] = $_POST['name']; 
        $_SESSION['start'] = time(); 
        echo "Bienvenue, " . $_POST['name'] . ". Une nouvelle session à été activée pour vous. Cliquez <a href=" . $_SERVER['PHP_SELF'] . ">ici</a> pour actualiser."; 
    } 
    else { 
        echo "ERREUR: Entrez votre nom!"; 
    } 
} 
else if (isset($_SESSION['name'])) { 
    // Si un session existait déja
    // Calcule le temps passé entre les deux visites
    echo "Bienvenue a nouveau, " . $_SESSION['name'] . ". Cette session à été activée il y a " . round((time() - $_SESSION['start']) / 60) . " minute(s). Cliquez <a href=" . 

$_SERVER['PHP_SELF'] . ">ici</a> pour afficher la page."; 
} 
?> 
</body> 
</html> 

Dans cette exemple, la présence ou non de variable session est utilisée pour déterminer laquelle des trois options afficher. Le temps de départ de la session est aussi 

enregistrée dans $_SESSION['start'] avec la fonction time(), qui retourne le nombre total de seconde entre le 1 Janvier 1970 et l'heure courante. La seconde étape calcule le 

temps passé entre maintenant et le temps stocké dans $_SESSION['start'] et l'arrondi pour afficher le temps approximativement écoulé. 

C'est important de noter que l'appel de session_start() DOIT apparaitre en premier, avant toute sortie générée par le scription (incluant que vous n'utilisez pas la fonction de 

mise en cache des sorties PHP comme vous pouvez lire à http://www.php.net/manual/en/ref.outcontrol.php. Ceci est du fait que la fonction de maintient des sessions dans 

PHP utilise des cookies mémoires pour gérer les sessions, et les en-tête de cookies doivent etre transmises avant quelque sortie client qu'il soit. Si vous voyez une erreur 

comme celle-ci dans les pages utilisant vos sessions :

Warning: Cannot send session cache limiter - headers already sent (output started at ...)

c'est probablement que quelque part, d'un manière ou d'une autre, des sorties ont été trouvées avant l'appel du session_start(). Parfois un retour charriot ou un espace 

blanc en dehors des balises php entourant le session_start() peut causer l'erreur, donc soyez vigilant.


Comme dit précédement, chaque session possède un ID de session unique, que PHP utilise pour garder les valeurs de chaque client. Cet ID de session est une longue chaine 

alphanumérique automatiquement passée par PHP depuis la page qui utilise les sessions. Pour voir a quoi cela ressemble, utilisez la fonction session_id(), comme dans ce 

simple exemple :

<?php 

// démarrer la session
session_start(); 

// afficher l'ID de session 
echo "Je traque votre ID de session : " . session_id(); 

?> 

Quand l'utilisateur ferme son navigateur et détruit les sessions, le tableau $_SESSION est vidé de toutes ses valeurs et variables. Vous pouvez également détruire vous 

même une session, par exemple quand l'utilisateur se déconnecte (ndlr: Il clique sur un lien Fermer la session) en appelant la fonction session_destroy(), comme dans 

l'exemple suivant :

<?php 

// démarrer la session
session_start(); 

// et la détruire
session_destroy(); 

?> 

Dans ce cas, vous vous demandez si ce que vous lisez ci-dessus est exact... Oui ! Avant d'appeler la fonction session_destroy() vous devez d'abord rappeler la fonction 

session_start() pour recupérer la session courante.

RAPPELEZ-VOUS : $_SESSION est un tableau superglobal, et vous pouvez utiliser toutes les fonctions internes et externes sans le déclarer comme global au préalable. Dans 

le simple exemple suivant, vous allez voir :

<?php 

// démarrer la session
session_start(); 

// cette fonction vérifie le contenu d'une valeur de la session
// et retourne true ou false
function isAdmin() { 
    if ($_SESSION['name'] == 'admin') { 
        return true; 
    } 
    else { 
        return false; 
    } 
} 

// attribue la valeur a $_SESSION['name'] 
$_SESSION['name'] = "guessme"; 
// appel la fonction en utilisant la variable session
// retourne faux ici
echo isAdmin()."<br />"; 

// attribue la valeur a r $_SESSION['name'] 
$_SESSION['name'] = "admin"; 
// appel la fonction en utilisant la variable session
// retourne vrai ici
echo isAdmin()."<br />"; 

?> 

Vous pouvez en lire plus a propos des sessions et de leur maintient a http://www.php.net/manual/en/ref.session.php. 

Règles du jeu
Une session fonctionne en utilisant un cookie mémoire, ce qui explique qu'il n'est disponible que tant que une fenetre de navigateur est toujours active. Quand le navigateur 

est éteint, la mémoire allouée au cookie est vidée et la session détruitre. Si vous voulez utiliser des cookies de plus longue durée, vous devez utiliser les fonction PHP de 

cookies pour écrire un cookie sur le disque dur de l'utilisateur, et le relire au besoin.

Avant de commence à utiliser les cookies, il y a quelques points sur lequels il faut etre vigilant :

Quand les cookies sont utilisée pour enregistrer les valeurs d'un certain domaine, ils ne peuvent etre relus que par le domaine qui les à crées (ndlr : Domaine = l'adresse 

web, le domaine propriétaire)
Un même domaine ne peut créer plus de 20 cookies, et chaque cookie est limité à la taille de 4 KB
Un cookie possède habituellement six attributs, le premier est le mandataire. Il y a :
name : le nom du cookie
value : la valeur du cookie
expires : la date et l'heure a laquelle le cookie expire
path : le dossier dans lequel le domaine peut accéder au cookie
domain : le domaine dans lequel le cookie est valide
secure : un marqueur booléen indiquant si le cookie ne peut etre transmit que pas connexion sécurisée

Plus d'informations sur les cookies peuvent être obtenus depuis Netscape, les personnes qui les ont inventée. Visitez http://www.netscape.com/newsref/std/cookie_spec.html 

pour connaitre les spécificiations Netscape.

C'est important de se rappeler que, quand le cookie est écrit chez l'utilisateur, vous êtes le programmeur qui a le plus petit contrôle de ceux-ci. Si un utilisateur décide de 

désactiver les cookies dans son navigateur, vos cookies ne seront simplement pas sauvegardés. 

Maintenant que vous savez cela, jetons un oeil sur l'utilisation des cookies dans PHP


Retrouver de vieux amis
PHP offre une seule fonction manipulant les cookies : setcookie(). Cette fonction vous autorise a lire et ecrire des cookies, comme dans l'exemple :


<?php 

if (!isset($_COOKIE['visited'])) { 
    // si le cookie n'existe pas
    // on le crée
    setcookie("visited", "1", mktime()+86400, "/") or die("Impossible d'écrire le Cookie"); 
    echo "C'est votre première visite aujourd'hui"; 
} 
else { 
    // Si le cookie existe 
    echo "Heureux de vous revoir mon viel ami !"; 
} 

?> 

Pour voir comment cela fonctionne, appelez votre pages plusieurs fois, La premiere fois, parceque le cookie n'existait pas encore, le premier message est affiché, mais pour 

la suite, le client reconnait le cookie déja écrit et affiche le second message.

NOTE : Ceci fonctionne meme si vous fermez le navigateur entre temps, voila la différence avec les sessions

La fonction setcookie() accepte 6 arguments : le nom du cookie, sa valeur, sa date d'expiration, le domaine, le dossier pour le quel c'est valable et une valeur booléene 

indiquant si le cookie peut ou non etre transmis par le biais de protocoles HTTP non sécurisés. Comme expliqué précédement, seulement le nom et la valeur sont 

nécéssaires, les autres sont facultatifs

La valeur des cookies est automatiquement envoyée au client et convertis en une paire de CLEF-VALEUR dans la variable $_COOKIE, comme un tableau superglobal identique 

a $_SESSION. Les valeur peuvent etre retrouvées grace à la notation standard des tableaux, comme dans l'exemple ci-dessus. NOTE : Comme pour les sessions vous devez 

appeler la fonction setcookie() avant toute sortie, sinon vous aurez l'erreur suivante :

Warning: Cannot add header information - headers already sent by (output started at ... )


Formulaire et Fonction
Voici un exemple un peu plus complexe: 

<?php 

if (!isset($_POST['email'])) { 
    // si le formulaire n'a pas ete envoye
    // affiche le
    // si le cookie existe, pre rempli le formulaire avec ses valeurs
?> 
    <html> 
    <head></head> 
    <body> 
     
    <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post"> 
        Enter your email address: <input type="text" name="email" value="<?php echo $_COOKIE['email']; ?>"> 
        <input type="submit" name="submit"> 
        <?php 
        // calcule egalement le temps depuis le dernier envoi
        if ($_COOKIE['lastsave']) { 
            $days = round((time() - $_COOKIE['lastsave']) / 86400); 
            echo "<br /> $days jour(s) depuis votre dernier envoi"; 
        } 
        ?> 
    </form> 
     
    </body> 
    </html> 
<?php 
} 
else { 
    // le formulaire a été envoyé
    // rempli le cookie avec les données du formulaire et du timestamp
    // le cookie expire dans 30 jours
    if (!empty($_POST['email'])) { 
        setcookie("email", $_POST['email'], mktime()+(86400*30), "/"); 
        setcookie("lastsave", time(), mktime()+(86400*30), "/"); 
        echo "Votre email à été enregistrée."; 
    } 
    else { 
        echo "ERREUR: Entrez votre adresse email!"; 
    } 
} 
?> 
</body> 
</html> 

Dans ce cas, les valeurs entrées dans la feuille sont stockés dans une cookie appelé email, et automatiquement retrouvée pour pré-remplir le formulaire avant la requete. 

Cette technique est fréquement utlisée par les sites qui requièrent un login et un mot de passe, pré-remplissant ainsi le nom d'utilisateur dans la boite de login avec la valeur 

stocké dans le cookie depuis la dernière identification réusssie.

Cet exemple démontre également comme stocker plus d'un cookie par domaine, en appelant setcookie() plusieurs fois. Dans l'exemple ci-dessus, le temps que prend 

l'utilisateur pour remplir le formulaire est stocké dans un second cookie pour calculer le temps entre deux entrées.

Pour supprimer un cookie chez le client, appelez simplement setcookie() avec la meme syntaxe, mais définissez une date de validité dans le passé. Cela provoque la 

suppression du cookie chez le client. Voici un exemple : 

<?php 

// supprime un cookie
setcookie("lastsave", NULL, mktime() - 3600, "/"); 

?> 

Lisez-en plus a propos des cookies et de la fonction setcookie a : http://www.php.net/manual/en/features.cookies.php et 

http://www.php.net/manual/en/function.setcookie.php. 

Accès autorisé
Comme je l'ai dit au début de ce tutorial, les cookies et les sessions sont deux modes différents pour stocker des données "persistantes" chez le client. Une session retient les 

données pour le temps d'une session, un cookie retient les données pour autant de temps que vous avez besoin. En sachant cela, jetons un oeil sur l'exemple suivant, qui 

utilise conjointement les deux méthodes :

L'application est une simple identification. Avec certaines pages visibles seulement aux utilisateur identifées avec succès. Les utilisateurs non identifées avec un mot de passe 

valide sont redirigés vers une page d'erreur spéciale. La liste des noms d'utilisateurs et des mots de passe sont stockés dans une base MySQL et php vérifie si il peut 

accorder ou non l'accès

The application here is a simple user authentication system, where certain pages can only be viewed by users who successfully log in to the system. Users who have not 

been authenticated with a valid password are denied access to these "special" pages. The list of valid usernames and passwords is stored in a MySQL database, and PHP is 

used to verify a user's credentials and decide whether or not to grant access. 

On présume qu'une table comme ceci existe : 

+-------+-----------------------------------------------+
| name  | pass                                          |
+-------+-----------------------------------------------+
| sue   | 9565d44fd0fe4db59f073eea1db70f3ea258e10b      |
| harry | 6e74234b8b552685113b53c7bff0f386c8cef8cf      |
| louis | 6817dda51b64b8190029490d2811a4d9cb9cd432      |
| sam   | bd17f8243e771a57cfbb06aa9a82bbf09fd2d90b      |
| james | 792ec9b44d432c947ac6775b2b52326e9d08512f      |
+-------+-----------------------------------------------+

avec un champ unique de nom d'utilisateur et un mot de passe crée avec la fonction SHA1(). Ici php va faire le gros du travail :

<?php 

if (isset($_POST['name']) || isset($_POST['pass'])) { 
    // formulaire recu
    // verifie les valeurs
    if (empty($_POST['name'])) { 
        die ("ERREUR: Entrez un nom d'utilisateur!"); 
    } 
    if (empty($_POST['pass'])) { 
        die ("ERREUR: Veuillez entrer un mot de passe!"); 
    } 

    // Defini les variable d'acces au serveur mySQL
    $host = "localhost"; 
    $user = "test"; 
    $pass = "test"; 
    $db = "db2"; 
     
    // Ouvre la connexion
    $connection = mysql_connect($host, $user, $pass) or die ("Unable to connect!"); 
     
    // Selectionne la base
    mysql_select_db($db) or die ("Unable to select database!"); 
     
    // Construit la requete
    $query = "SELECT * FROM users WHERE name = '" . $_POST['name'] . "' AND pass = SHA1('" . $_POST['pass'] . "')"; 
     
    // Execute la requete
    $result = mysql_query($query) or die ("Error in query: $query. " . mysql_error()); 
     
    // Regarde les valeurs retournees par la base
    if (mysql_num_rows($result) == 1) { 
        // si une ligne est retournee,
        // l'authentification est bonne
        // crée le cookie avec le nom d'utilisateur et la session
        session_start(); 
        $_SESSION['auth'] = 1; 
        setcookie("username", $_POST['name'], time()+(84600*30)); 
        echo "Acces autorisé !"; 
    } 
    else { 
        // pas de résultat
        // authentification impossible 
        echo "ERREUR: Login ou Mot de passe incorrect!"; 
    } 
     
    // Libere le resultat
    mysql_free_result($result); 
     
    // Ferme la connexion
    mysql_close($connection); 
} 
else { 
    // pas d'envoi
    // affiche le formulaire 
?> 
    <html> 
    <head></head> 
    <body> 
    <center> 
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>"> 
    Username <input type="text" name="name" value="<?php echo $_COOKIE['username']; ?>"> 
    <p /> 
    Password <input type="password" name="pass"> 
    <p /> 
    <input type="submit" name="submit" value="Log In"> 
    </center> 
    </body> 
    </html> 
<?php 
} 

?> 

Ici, les valeurs entrées dans la boite de login sont intégrée dans une requete mySQL, qui est executée sur la table user. Si le nom et le mot de passe correspondent, un seul 

enregistrement est retourné, indiquant que l'authentification est accordée, si aucun enregistrement n'est retourné, c'est que l'authentification a échou

Quand l'authentification reussi, une session est créer : $_SESSION['auth'] est créer et assigné a la valeur booléene true, et le nom d'utilisateur est stocké dans un cookie
pour la prochaine fois, le cookie dure 30 jours, et est utilisé pour pré-remplir le champ Login pour la fois suivante.

Bien sur ce n'est pas assez, il faut maintenant bloquer les pages interdites si l'utilisateur n'est pas identifiée. Sans cela, n'importe qui peut passer la sécurité en tapant 

simplement l'adresse de la page dans l'URL.

Maintenant, pour protéger une page, il suffit de vérifier que la variable $_SESSION['auth'] existe et d'autoriser l'acces ou non

<?php 

// start session 
session_start(); 
if (!$_SESSION['auth'] == 1) { 
    // verifie si l'autorisation est la
    // sinon die avec erreur
    die ("ERREUR: Acces interdit!"); 
} 
else { 
?> 
    <html> 
    <head></head> 
    <body> 
    Ceci est une page sécurisée. Vous pouvez seulement la voir si $_SESSION['auth'] = 1 
    </body> 
    </html> 
<?php 
} 

?> 

Chouette non ? Seul les utilisateurs loggés sont autorisés a voir cette page, parceque leur clients on la session $_SESSION['auth'] a la valeur 1 en mémoire. Tout les autres 

auront la page d'erreur.

Voici la fin de ce tutorial.


 Conclusion

Et voila ;-)


 Historique

07 octobre 2004 00:09:59 :
Il fallait un S au pluriel de secret lol :-)

 Sources du même auteur

NOMBRE DE JOURS ENTRE DEUX DATE EN UNE SEULE LIGNE
Source avec Zip Source avec une capture APPLICATION : UN CALENDRIER VERTICAL MULTI-UTILISATEUR AVEC ...
ENVOI DE MAIL AVEC PIECE JOINTE
TUTORIAL : PHP CONSTRUIT LES BASES, LES TABLES ET LES CHAMPS...
TUTORIAL : PHP DIALOGUE AVEC UNE BASE DE DONNÉES MYSQL

 Sources de la même categorie

Source avec une capture INTÉGRER À UNE BASE DE DONNÉES DES COORDONNÉES GÉOGRAPHIQUES... par slhuilli
Source avec Zip DÉCOMPOSER UN CODE PHP AVEC LA FONCTION INCLUDE par Julien39
CRÉATION D'UN SCRIPT D'AUTHENTIFICATION par phpAnonyme
Source avec Zip Source avec une capture N/X API: GOOGLE MAPS DEPUIS PHP VALID W3C par GillesWebmaster
PHP EXTRAIRE DES MAILS D'UN GROS FICHIER LOCAL OU DISTANT par cosmoswarezone1

Commentaires et avis

Commentaire de Antidote le 07/10/2004 03:20:42

Des secret où ça ?

On trouve les exemples les plus basiques sur les sessions et les cookies rien de bien extraordinaire.

Si seulement déjà la source était de toi encore une fois ... Pas de session_name() pas de PHPSESSID heu bref j'ai même pas vu parler du time out sur les session.
Dit moi comment on enregistre en session un objet de classe ?

On aurait pu dire que php recharge aussi les session selon les paramètres transmis par l'url ex :
la variable $_SESSION['id'] existe
tu lance une nouvelle page avec ?id=quelqueschose ce quelque chose n'a rien à voir avec ma variable $_SESSION['id']. mais lorsque php va rencontré session_start();
ohhhhhhh $_SESSION['id'] à pris la valeur transmise en paramètre... mince alors.

les cookies tient si tu parlais des domaines de validité du cookies, très pratiques pour les sites divisé en sous domaines de réutilisé le même cookies et pas 36 mais comment fait on ?

Bref les secret je ne les vois pas. Désolé de casser encore ta source.
Autant de longueur pour si tu peu... Tu vherche quoi à poster autant de source ? Tu veux une médaille ? Poste une source mais valable avec un titre humble ça serait tout aussi bien. Cordialement.

je te met 1 pour l'effort du copier coller.

Commentaire de toutphp le 07/10/2004 06:51:04

Tu critiques ce copier/coller d'accord.
Mais tu critiques cet source là pas d'accord :
*ayant toujours était interessé par les sessions je trouves que ce petit tutoriel est sympa. Il ne resntre pas trop dans les détails et c'est bien pour un débutant.
*toi tu parles de chose, apparement plus complexe, mais as-tu fait un  script pour expliquer de a à z les sessions(ou même que les cookies).

Ce script, je penses, est bien pour les débutants.
Pourtant je ne mets que 4/10 car antidote n'est pas l'auteur de ce script

Commentaire de toutphp le 07/10/2004 06:51:14

Tu critiques ce copier/coller d'accord.
Mais tu critiques cet source là pas d'accord :
*ayant toujours était interessé par les sessions je trouves que ce petit tutoriel est sympa. Il ne resntre pas trop dans les détails et c'est bien pour un débutant.
*toi tu parles de chose, apparement plus complexe, mais as-tu fait un  script pour expliquer de a à z les sessions(ou même que les cookies).

Ce script, je penses, est bien pour les débutants.
Pourtant je ne mets que 4/10 car antidote n'est pas l'auteur de ce script

Commentaire de Magidev le 07/10/2004 10:17:39

Antidote : Le titre "Tous les secrets..." est une forme syntaxique si tu as appris le français, et de plus le code est classé dans la catégorie débutants. Donc on peut dire que pour les débutants il s'agit de secrets, mais ce ne sont que des mots, histoire d'avoir un titre... Sinon j'aurais pu mettre "Cookies et Session - STOP - PHP - STOP" en style télégraphique je n'aurais choqué personne. De plus, si tu as des critiques sur la source tu vas trouver Mr. Vikram Vaswani de la Zend Company et lui dire combien sa source est inutile.

Et si tu n'est pas débutant, pourquoi t'acharner sur une source qui ne te concerne pas.

Assez souvent je voit des messages sur le forum avec des problèmes de session et j'ai trouvé ce tutorial intéréssant alors j'ai passé du temps à en faire LA TRADUCTION ce n'est absolument pas du copier coller.

Et même remarque que précédement, je n'ai pas a me faire attaquer parceque je poste une source. Des critiques et commentaires sont les bienvenus mais le respect ne doit pas etre négligé (cfr. La charte de bonne conduite)

En outre, je ne m'attribue pas le mérite de cette source, je le met dans le début, je n'ai fait que la traduction.

Pour terminer, va dire a la Zend Company que leurs tutoriaux ne vallent pas grand chose, il seront content de prendre en compte toute ta lumière d'expert en ce domaine.

Source originale : http://www.zend.com/php5/abs/php101-10.php

Commentaire de juki_webmaster le 07/10/2004 13:00:36

Magidev > Tu met trop de source en ce moment, voila la qualité du travail soit tu copie soit tu met des sources incomplete.
Deplus ajoute la source qu'on tu ajoute une source qui n'est pas de toi.
Sinon la source est bien expliquer meme si c'est assez basique comme contenu direct.
Bonne continuation.
NB : Fait un petit projet de 6mois ou plus et expose alors là tu montera en succée si c'est se que tu cherche :)

Commentaire de Magidev le 07/10/2004 13:11:45

Juki_webmaster : Je ne cherche pas le succès, et mes sources incompletes si elle le sont, sont corrigées dès que l'on me le fait remarquer, et comme je l'explique a Antidote, cette source est une traduction en français d'une source de Zend.com (même pas besoin de les présenter eux :-) ) ou plutot d'un article.

Je ne cherche pas a publier n'importe quoi et je ne cherche ni à connaitre le succès, ni a faire grimper mes points, ce n'est pas le but de la communauté. Mais je trouvais intéressant d'expliquer le fonctionnement des cookies et des sessions en PHP pour LE DEBUTANT.

Vu le nombre de questions a ce propos dans le forum je trouvais opportun de placer une telle source.

Et l'auteur original figure dans la description et il est indiqué qu'il vien de chez Zend

Source : (déja mise dans le commentaire précédent) Source originale : http://www.zend.com/php5/abs/php101-10.php

A noter que je fait cette traduction pour le réseau CodeS-SourceS.com de ma propre initiative, car j'ai trouvé cet article très intéressant pour expliquer le fonctionnement des sessions et cookies, il est rempli d'exemples et se dévellope progressivement.

Je ne revendique en aucun cas la paternité de ce code ;-)

Mais je tient compte de ton commentaire, qui soit dit en passant est un exemple pour certains, parceque j'en suis a la limite de me faire insulter quand je poste une source parfois et le tien correspond bien a la charte ;-P.

Commentaire de Antidote le 07/10/2004 14:20:37

Magidev > Je me considère toujours comme un débutant même si je connait très bien le php, je suis peut etre initié mais en aucun cas expert sauf le jour ou je n'aurait plus besoin d'aller sur code source ou sur le manuel de php pour trouver des infos complémentaires.

Je m'acharne pas sur toi. C'est source très bien pour ceux qui n'ont aucune connaissances sur les sessions et les cookies bien qu'un peu longue.

C'est bien que tu veuille participer à l'évolution php, en effet je m'énerve peut être un peu vite parce que ce n'est pas la première source de toi que je visite et à chaque fois je suis venue vis à vis d'un titre me laissant espoir de trouver quelques chose de nouveau, de personnel et de concret. Déception donc à chaque fois. Je m'attendait à de vrai secret sur les session. Par exemple quand je parle du rechargement des session via url c'est que j'ai été lié à ce problème. des chose ainsi qu'on ne trouve nul part.si ce n'ai qu'une brève ligne qui ne frappe pas l'oeil dans le manuel de php.

Bref, je ne suis pas là pour te descendre, ni pour me défendre, ni pour critiquer quoi que ce soit. Comme les relations pour mysql, je te suggère de mettre un titre plus adapter. Pour mieux orianté tout le monde. C'est bien de vouloir faire du ludique pour le php.
Mais croit tu qu'un débutant veux directement s'ataquer au secret des sessions ? je criot qu'il cherchera d'abord les bases ^^ .
Tutoriel, Apprendre Mme session ou Mr cookies avec n'importe quel formule syntaxique mais voilà, je ne m'étends pas.

Je ne poste pas de source pourquoi ? Je développe un gros gros projet php depuis 6 mois, que j'ai du remanier pour du php 5 puis remanier pour des classes. et j'en ai encore pour un bout de temps. Un système dédié au personne qui connaisse php et qui ne veulent pas se compliquer la vie. Ceci verra peut être le jour d'ici 2005 dans un site complet. Après je posterai peut être des sources lié au classe que je développe. tel un parseur xml, un sender de mail complet sans la fonction mail, gestion ftp, gestion pop3, Imap. Gestion client, gestionnaire de news, ainsi de suite...

Ce projet vous intéresse ? Je serais pas contre de l'aide. La tienne ne serait pas de refus. Au moins tu sais pourquoi je ne poste pas de source pour le moment. par contre peut être comme toi j'en placerai 25 d'un coup un jour. Selon les besoins et selon ce que l'on trouve déjà sur codes-sources.

PS : Ton calendrier à l'air très bien à première vu.  Voilà j'espère ne pas avoir créer de conflit. Je pense faire des remarques constructives le plus souvent. Ne le prend pas mal en tout cas.

Commentaire de Antidote le 07/10/2004 14:26:40

J'ai relu mon premier, c'est vrai que je t'ai attaquer personnellement à regret, 3h du mat passé et mal de tete, alors autant pour moi.

Je remonte à 5/10 pour la peine.

Commentaire de Anthomicro le 08/10/2004 19:24:37

Salut ;-)

Il existe plein de tutos de ce type sur le site...

a +

Commentaire de CChargy le 02/03/2005 14:24:17

Et alors, un de plus c'est toujours ca a prendre, non?
Et puis c'est rabachant que comprand vraiement.
Et pui en tant que débutant, pure et dur(c'est mieux que en chair et en os), c'est agréable queslque chose de simple.
Bonne prog
Colin CHARGY

Commentaire de Sl4d3 le 08/05/2005 12:32:16

Vous y allez un peu dur...

Je serais lui je ne me casserai plus le cul a faire des traductions...

Beaucoup ici ne comprennent pas l'anglais ni les sessions alor ce tutorial est plus que bienvenue. Il précise bien que ce n'est pas de lui et qu'il est juste le traducteur dès lors un accueil bien plus chaleureux aurait du être fait.

Commentaire de CChargy le 09/05/2005 10:18:29

Tout a fait daccord

Commentaire de Dorimar le 03/06/2005 08:35:01

Un mot: "MERCI"...
Continu comme sa , tes sources/Tutau aident fortement les "noobs".(moi el premier :D)
See y ;)

Commentaire de sidikire le 22/06/2005 23:31:06

J'suis bien heureux moi d'avoir tombé sur ce tuto traduit =D, je recherchais justement quelques réponse a mes questions de newbies, et j'ai ai trouvé, donc merci!
Les tutos sont les bienvenue ^^, c'est comme ça que je peut apprendre et comprendre!

Commentaire de chanlle le 14/09/2005 00:59:20

Moi aussi, je suis contente d'avoir trouver ta source parcque les cookies, je connais sa tres mal et je cherche a laisser le choix au visiteurs de ma zone membre d'une connexion automatique ou de rentrer son mot de passe à chaque fois.Si tu peut m'indiquez ce que je doit faire parque la.......
Merci

Commentaire de metis15 le 19/02/2006 16:09:48

Bonjour,
au cas où ce fil est encore suivi :
J'ai un problème avec un cookie qui est censé faire suivre les champs remplis d'un formulaire qu'on trouve sur plusieurs pages d'un site.
Le problème, c'est que sur un certain PC XPpro IEsp2, le cookie fait un peut ce qu'il veut. Il ne semat pas toujours à jour avec des nouvelles données, etc.
On peut voir le cookie ici :
http://www.graphm.com/cookie.txt
J'ai peur qu'il comporte quelque bug de code...
Ce cookie n'est pas de moi bien sûr, je ne connais pas grand chose au JS.
Si quelqu'un peut m'aider, grand merci !!

Commentaire de dargoan le 06/06/2007 01:01:52

Merci pour ce tutoriel.
Je dois dire que je débute dans les sessions et les cookies. Donc, ça a bien été justement, pas à pas, et assez détaillé.

Commentaire de toto6311 le 07/02/2009 17:30:37

Merci pour le tuto très bon ,ya beaucoup de mec ici qui rale , et qui montre rien aller vous couchez les raleurs très bon tutos , et bien référencer sur google , merci pour les bonnes info 10/10

Vive le partage php , et nique les mec qui garde leur secret de merde

Commentaire de gautordi0101 le 01/04/2009 14:09:53 10/10

Merci pour ce tuto génial car pour les cookies je galérais et ce script est vraiment très complet.


Pour ceux qui râlent que c'est du copier/coller (ou qu'il y a des erreurs...), ils ont qu'a en faire un !!!

Commentaire de FXPHANTOM le 31/12/2009 15:56:21

Contrairement à ce que peuvent dire certaines personnes ,je trouve ce tutoriel très bien expliqué . Merci pour le temps que tu as passé pour le réaliser .

Commentaire de kertimanoff le 19/08/2010 15:52:53

pour reprendre des termes, ce tuto est "sympa", "bien pour les débutant"....
si le titre été "tuto session cookie pour débuter" ok, mais de la a écrire "tous les secrets", c'est normal que ça clache, dacors ce tuto est bien expliqué mais y'a aucun secret jsuis désolé.
en plus le tuto est super long, alors je me suis dit que les secret allé peut étre apparaitre d'un moment a l'autre et rien... je suis trés déçu

Commentaire de comemich le 05/12/2010 18:31:41 9/10

Le tutorial est très bien fait et très utile pour les débutants qui s'intéressent aux sessions PHP. Pour les autres, c'est un tuto sur l'orthographe qu'il faudrait faire. ça serait surement très utile aussi ...

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,045 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales