From: Kim Nguyễn Date: Mon, 18 Nov 2013 10:01:07 +0000 (+0100) Subject: Add lesson 8 X-Git-Url: http://git.nguyen.vg/gitweb/?p=hacks%2FsimpleWebSlides.git;a=commitdiff_plain;h=11d5eeffd586cf2be5ed4e09b171be97c2f4a87b Add lesson 8 --- diff --git a/prog_internet/pdf/prog_internet_08.pdf b/prog_internet/pdf/prog_internet_08.pdf new file mode 100644 index 0000000..ca5cae4 Binary files /dev/null and b/prog_internet/pdf/prog_internet_08.pdf differ diff --git a/prog_internet/pdf/prog_internet_08_print.pdf b/prog_internet/pdf/prog_internet_08_print.pdf new file mode 100644 index 0000000..0ee96d9 Binary files /dev/null and b/prog_internet/pdf/prog_internet_08_print.pdf differ diff --git a/prog_internet/prog_internet_08.xhtml b/prog_internet/prog_internet_08.xhtml new file mode 100644 index 0000000..33651a0 --- /dev/null +++ b/prog_internet/prog_internet_08.xhtml @@ -0,0 +1,397 @@ + + + + + PHP : Sessions et persistance + + + + + + + + + + + + + + + + + + + + +
+

Programmation Internet

+

Cours 8

+
kn@lri.fr
+ http://www.lri.fr/~kn +
+ +

En-tête de requêtes HTTP

+ +
+

Retour sur le protocole HTTP

+ +
+ +
+

Retour sur le protocole HTTP (2)

+ +
+
+

Modifier le content-type en PHP

+

Fichier notes_csv.php:

+ <?php + header('Content-type: application/csv'); + header('Content-Disposition: attachement; filename="notes.csv"'); + echo "Nom, Note\n"; + foreach ($NOTES as $nom => $note) + echo $nom . ", " . $note . "\n"; + + ?> +

⚠ Attention!

+ +
+ +
+

Quelques en-tête utiles

+

En tête utilisés par le serveur dans ses réponses

+
+
Content-type
type MIME du contenu envoyé par le + serveur
+
Content-Disposition
permet de mentionner un nom de + fichier : attachment; filname="foobar.baz"
+
Cache-Control
permet de forcer le client à + retélécharger la page: no-cache, must-revalidate +
+
Last-Modified
date de dernière modification du + contenu demandé
+
+

En tête utilisés par le client dans ses requêtes

+
+
Range
permet de ne récupérer qu'un intervale + d'octets donné dans un fichier: bytes=500-999 +
+ … +
+ +
+
+

Retour sur le protocole HTTP (3)

+

On rappelle que HTTP est un protocole stateless + (sans état, i.e. le serveur Web ne conserve pas d'information + entre les connexions). Quel problème cela pose-t-il ?

+ +

⇒ difficle de réaliser une « application » + moderne répartie sur plusieurs pages

+
+ +

Cookies

+
+

Cookies

+

Un cookie est un packet de données envoyé par le + serveur, stocké par le client (navigateur Web) et renvoyé au serveur + lors d'une nouvelle connexion. Les propriétés d'un cookie sont: +

+
+
Son nom
une chaîne de caractères
+
Sa valeur
une chaîne de caraceres
+
Sa durée de vie
jusqu'à la fin de la « session » ou pour + une période donnée
+
Son domaine
Le nom du site web émetteur du cookie
+
Son chemin
Le sous-répertoire (par rapport à la racine + du site) pour lequel le cookie est valide
+
+

⚠ Attention! seul le domaine qui a + déposé le cookie est capable de le relire

+
+
+

Cookies en PHP

+

Créer ou mettre à jour un cookie sur le client:

+ + setcookie($nom, $val, $date); + +
+
$nom
nom du cookie
+
$val
valeur du cookie
+
$date
date d'expiration en secondes + depuis epoch (1er janvier 1970 00:00:00) + ou NULL pour une expiration automatique.
+
+

(on peut récupérer le nombre de secondes depuis epoche avec + la fonction time()).
+ Exemple: +

+ setcookie("mon_cookie", "42", time() + 3600 * 24 * 30); +
+ +
+

Cookies en PHP

+

On peut récupérer la valeur d'un cookie depuis PHP: +

+ $_COOKIE["mon_cookie"] +

Un cookie "foo" existe (i.e. a été défini + auparavant) si une entrée correspondante existe dans le tableau + global $_COOKIE. On peut tester qu'une entrée + existe dans un tableau avec isset(). +

+

⚠ Attention!

+ +
+ +
+

Avantages et inconvénients des cookies

+ +
+

Sessions

+
+

Sessions

+

Une session HTTP est un ensemble de requêtes/réponses HTTP + entre un serveur et un même client.
+ Exemple d'un sondage en ligne: +

+
  1. Le visiteur arrive sur la page q1.php en cliquant sur + le lien « commencer le sondage » (Début de session) +
  2. +
  3. Sur q1.php, l'utilisateur coche des choix dans un formulaire et appuie + sur un boutton de soumission qui l'envoie sur q2.php +
  4. +
  5. …
  6. +
  7. Sur q10.php, l'utilisateur coche des choix dans un + formulaire et appuie sur un bouton de soumission qui l'envoie + sur resultat.php
  8. +
  9. Sur resultat.php, le résultat global du sondage (% + par question, nombre de participants jusqu'à présent etc...) est + affiché (Fin de session) +
  10. +
+ +
+
+

Variables de session

+

Pour programmer une application Web, on souhaîte avoir accès à + des variables de session c'est à dire des variables qui + sont: +

+ +

Les variables de sessions sont donc propres à chaque client et + persistent le temp de la session (le temps de session est décidé par + le serveur)

+
+
+

Variables de session en PHP

+

On initie une session avec la fonction:

+ session_start(); +

Une fois appelée, la variable $_SESSION + contient un tableau que l'on peut utiliser entre plusieurs + pages. Les valeurs contenues dans le tableau persistent jusqu'à la + fin de la session. Une session se termine: +

+ +

⚠ + Attention! session_start() doit être appelé + avant le premier echo du fichier.

+
+
+

Variables de session en PHP (2)

+ + <?php /* Fichier page1.php */ + session_start(); + $_SESSION["Valeur"] = 42; + ?> + + + Veuillez cliquer sur le "page2.php"lien + + +]]> + + + La valeur est echo $_SESSION["Valeur"]; + + + +]]> +
+
+

Avantages et inconvénients des session

+ +
+
+

Sessions PHP: détails d'implantation

+
+
Coté client
+
+
+
+
+
+
+
+
+
+Connexion à une page PHP (envoie du cookie ("php_ssid", "12345")) + + +
+
Coté serveur (PHP)
+ session_start();
+ - génération d'un ID unique "12345"
+ - dépot d'un cookie "php_ssid", valeur "12345", durée 10 minutes + - création dans un tableau global d'une entrée:
+ $_GLOBAL["12345"] = Array();
+
+ $_SESSION = $_GLOBAL[$_COOKIE["php_ssid"]] +
+
+
+ +
+

Dans la vraie VieTM

+

Mélange de variables de sessions, cookies et bases de données.
+ Scénario réaliste: site de commerce en ligne +

+ +

Pourquoi ?

+ + +
+ + + diff --git a/themes/uPsud.css b/themes/uPsud.css index 26ac43f..e64202f 100644 --- a/themes/uPsud.css +++ b/themes/uPsud.css @@ -244,25 +244,30 @@ table.simple tr { } div.twocol { - width:100%; - position:relative; + width:99%; + position:absolute; + top:5em; } + div.twocol > div:first-child { - display:inline-block;width:50%; - position:relative; + display:inline-block;width:47%; + position:absolute; box-sizing:border-box; - padding: 0 1em 0 2em; + padding: 0 1em; border-style:dashed; border-width: 0 1pt 0 0; border-color:gray; - float:left; + left: 0pt; + top:0pt; } div.twocol > div:last-child { display:inline-block; - width:50%; - position:relative; + width:47%; + position:absolute; box-sizing:border-box; - padding: 0 2em 0 1em; + padding: 0 0em 0 5em; vertical-align:text-top; + right: 0pt; + top:0pt; } \ No newline at end of file