• Aucun résultat trouvé

Durée de vie Pourquoi ? Définition Plan 1

N/A
N/A
Protected

Academic year: 2022

Partager "Durée de vie Pourquoi ? Définition Plan 1"

Copied!
6
0
0

Texte intégral

(1)

IFT1147

Programmation Serveur Web avec PHP

Sessions et applications Web en PHP

IFT1147 - Sessions 2

Plan

Sessions - définition et théorie

Les témoins (cookies)

PHP et les sessions

Applications Web avec authentification

Sessions

Définition et théorie

IFT1147 - Sessions 4

Définition

Une session permet de sauvegarder l’état d’une application Web pour chaque usager (connexion).

L’état peut comprendre la valeur de n’importe quelle variable, comme p.e.

Le nom d’usager

Le contenu d’un panier d’achat

Les valeurs d’un formulaire

IFT1147 - Sessions 5

Pourquoi ?

Dans le protocole HTTP chaque requête est, à priori, indépendante.

Il faut donc trouver un mécanisme permettant

de sauvegarder sur le serveur Web l’état d’une connexion (i.e. ses variables)

d’inclure dans les requêtes HTTP des informations afin de retrouver l’état sur le serveur.

IFT1147 - Sessions 6

Durée de vie

Chaque session doit posséder une durée maximale puisque

L’espace disque du serveur est limité.

Le nombre d’identifiants de session est fini, donc limité.

On doit à tout prix éviter les attaques par le biais d’un identifiant de session choisi au hasard.

(2)

IFT1147 - Sessions 7

Comment ?

L’état de chaque session sera sauvegardé dans des fichiers sur le serveur Web (ou encore dans une BD).

Le navigateur envoie avec chaque requête son identificateur pour la session (sessionID). Les témoins (cookies) sont l’outil le plus fréquemment utilisé à cette fin (d’autres solutions existent).

Les témoins (cookies)

Une parenthèse pour pouvoir comprendre les sessions

IFT1147 - Sessions 9

Qu’est-ce qu’un témoin ?

Les témoins permettent de sauvegarder de l’information de façon permanente dans le navigateur.

Une fois un témoin accepté par le navigateur, celui-ci le retourne automatiquement à ce serveur Web à toutes les requêtes subséquentes.

IFT1147 - Sessions 10

Témoins et sécurité

Le navigateur n’envoie jamais un témoin à un domaine autre que celui qui l’a créé.

Un navigateur accepte un maximum de 20 témoins par domaine et leur taille peut être d’au plus 4kB chacun.

Chaque navigateur permet à l’usager de refuser les cookies et de les effacer.

IFT1147 - Sessions 11

Propriétés des témoins

Chaque témoin possède

Un nom

Une valeur

Une durée de vie

Une visibilité

Une accessibilité

Un indicateur de la sécurité

IFT1147 - Sessions 12

Durée de vie

Par défaut, le navigateur détruit le témoin quand il est fermé.

Si on veut sauvegarder une information de manière « permanente », il faut spécifier une date d’expiration (dans le futur).

Afin d’effacer un témoin, on spécifie une date d’expiration dans le passé.

(3)

IFT1147 - Sessions 13

Visibilité

Par défaut, le navigateur ne retourne que les témoins qui ont été créés par une page dans le même répertoire ou dans un sous-répertoire de la page actuellement demandée.

Le paramètre « visibilité » permet de spécifier un comportement différent.

IFT1147 - Sessions 14

Accessibilité

Par défaut, le navigateur ne retourne que les témoins qui ont été créés par le même serveur Web que la page demandée.

Le paramètre « accessibilité » permet de rendre un témoin disponible à d’autres serveurs Web à l’intérieur du même domaine.

IFT1147 - Sessions 15

L’indicateur de la sécurité

Par défaut, un témoin est transmis aussi bien par http que par https.

L’indicateur de la sécurité permet de spécifier qu’un témoin doit seulement être transmis par une connexion sécurisée.

C’est surtout utile pour des témoins dont la sécurité est très importante.

IFT1147 - Sessions 16

Requête et réception du témoin

GET /~dift1147/exemples/Cookies/nbVisites.php HTTP/1.1

Host: www-desi.iro.umontreal.ca

Referer: http://www-desi.iro.umontreal.ca/

~dift1147/exemples.php HTTP/1.x 200 OK

Date: Mon, 06 Sep 2004 12:21:23 GMT Set-Cookie: nbVisites=1

Content-Length: 4624 Connection: close

Content-Type: text/html; charset=ISO-8859-1

IFT1147 - Sessions 17

Nouvelle requête avec le témoin

GET /~dift1147/exemples/Cookies/nbVisites.php HTTP/1.1

Host: www-desi.iro.umontreal.ca

Referer: http://www-desi.iro.umontreal.ca/

~dift1147/exemples.php Cookie: nbVisites=1 HTTP/1.x 200 OK

Date: Mon, 06 Sep 2004 12:21:23 GMT Set-Cookie: nbVisites=2

Content-Length: 4624 Connection: close

Content-Type: text/html; charset=ISO-8859-1

IFT1147 - Sessions 18

PHP et les témoins

La fonction PHP permettant d’envoyer un témoin est, dans sa version la plus simple :

setcookie(nom, valeur)

Les témoins reçus sont accessibles dans le tableau associatif $_COOKIE, de façon analogue aux variables dans $_GET et dans $_POST.

(4)

IFT1147 - Sessions 19

PHP et les témoins

Comme déjà vu, l’échange des témoins se fait au niveau de l’entête HTTP.

Il est donc très important qu’aucune donnée HTML n’ait été envoyée avant que l’on fasse appel à la fonction setcookie().

Il faut absolument concevoir ses pages PHP en conséquence.

IFT1147 - Sessions 20

Bien concevoir ses pages PHP

Beaucoup de fonctions utiles (header, setcookie, session_start) agissant directement au niveau du protocole HTTP doivent être executées avant le début de l’envoi de contenu HTML.

Il faut donc toujours:

Traiter l’information avant d’afficher

PHP et les sessions

Comment la gestions des sessions est réalisée en PHP

IFT1147 - Sessions 22

PHP et les sessions

PHP, dans sa configuration standard, crée un fichier sur le disque pour chaque connexion. La valeur des variables de session y est sauvegardée.

Un cookie de nom PHPSESSID est envoyé au navigateur; il sert de clé d’accès au fichier et ainsi aux variables de session.

IFT1147 - Sessions 23

Et sans les témoins ?

PHP peut déterminer automatiquement si le navigateur accepte ou non les témoins.

Si les témoins ne sont pas acceptés, PHP peut inclure dans les formulaires et les liens locaux (pour des raisons de sécurité) un paramètre PHPSESSID afin de

transmettre l’identifiant de la session.

IFT1147 - Sessions 24

session_start()

session_start() débute une

nouvelle session ou accède à une session déjà existante.

On doit faire appel à session_start() à toutes les pages qui font partie de l’application.

session_start() envoie un témoin … on doit l’appeler au «début» de la page.

(5)

IFT1147 - Sessions 25

$_SESSION

$_SESSION est un tableau associatif qui contient toutes les variables de session.

Afin d’associer une variable avec la session, on doit l’ajouter au tableau

$_SESSION["maVar"] = $maVar;

Afin d’enlever une variable unset($_SESSION["abc"]);

IFT1147 - Sessions 26

Recette pour une session

<?php

// demarrer la session session_start();

// initialiser les variables de session if (!isset($_SESSION["nav"])) { $_SESSION["nav"]=array();

}

// utiliser les variables de session

$_SESSION["nav"][]=$_SERVER["PHP_SELF"];

// code HTML de la page

?>

IFT1147 - Sessions 27

Fin de la session

session_destroy() termine la session actuelle et efface toute trace de la session sur le disque du serveur.

PHP termine aussi automatiquement toute session après un certain temps (configurable) d’inactivité. Pour des raisons de performance, un paramètre

« probabilité de fin » existe.

IFT1147 - Sessions 28

Recette pour la fin de la session

<?php

// demarrer la session session_start();

// terminer la session session_destroy();

// code HTML de la page

?>

Il faut accéder à la session actuelle avant de pouvoir la terminer.

IFT1147 - Sessions 29

Quoi sauvegarder dans la session ?

Le tableau $_SESSION est l’endroit idéal afin de sauvegarder les informations spécifiques d’un usager:

Nom d’usager

Menus

Préférences d’affichage

IFT1147 - Sessions 30

Quoi sauvegarder dans la session ?

Il ne faut pas sauvegarder dans

$_SESSION les informations spécifiques d’une page, comme le résultat d’une recherche par exemple.

Ceci est dû au fait que rien ne garantit que l’usager n’a pas ouvert deux fenêtres de son navigateur qui font partie de la même session.

(6)

Applications Web avec authentification

Les morceaux du casse-tête se mettent en place …

IFT1147 - Sessions 32

Introduction

Pour beaucoup d’applications, il est primordial de pouvoir identifier un usager (authentification) et de pouvoir ensuite lui proposer un site adapté (session):

Commerce électronique

Transactions bancaires en ligne

IFT1147 - Sessions 33

La clé de la solution … - début

… est d’enregistrer une variable de session lorsque l’usager réussit l’étape de l’authentification.

On peut, en principe, se servir de n’importe quelle variable, comme

$_SESSION["login_reussi"]= true;

ou

$_SESSION["login"]= $login;

IFT1147 - Sessions 34

La clé de la solution - suite

Sur toutes les pages, on vérifie la présence de la variable de session et on redirige l’usager à la page de login si elle n’est pas présente.

Il est souvent nécessaire d’enregistrer le login de l’usager dans la session : sans cela, on est incapable de l’identifier.

IFT1147 - Sessions 35

Recette pour une application Web

<?php

//toujours demarrer session_start();

//verifier si la variable login existe if (!isset($_SESSION["login"])) { //redirection vers la page de login header("Location: login.php?

PHPSESSID={$_REQUEST["PHPSESSID"]}");

exit;

}

//suite du contenu 'normal' de la page

?>

Références

Documents relatifs

Caisse cantonale de compensation pour allocations familiales, p.. Caisse d'amortissement de la dette

Lois : voir sous Allocation, Assistance, Assurance, Code, Droits, Eglise, Fonds, Impôts, Instruction, Jours, Notariat, Routes, Travail. M. Meyer Hans, membre du

Nussbaumer Lucien (Modification de l'art. 71 de la loi sur l'exercice des droits politiques), p.. Nussbaumer Lucien (Modification de l'art. 99 de la loi sur l'exercice des

Nussbaumer Lucien (Modification de l'art. 93 de la loi sur les communes et les paroisses), p.. Nussbaumer Lucien (Revision de la loi sur l'instruction

Lois : voir sous Centre psycho-social, Communes et Paroisses, Construction de logements, Formation professionnelle, Frais pénaux, Instruction primaire, Juridiction des mineurs,

Lois : voir sous Assurances, Code civil suisse, Communes et Paroisses, Conseillers d'Etat, Construction de logements, Dette publique, Droit politique, Entreprises

• Valorisation pour évaluer le ROI de leur mise en œuvre – Mise en œuvre des bonnes pratiques. • Si le site / logiciel n’existe pas ou va

On observe la présence de thrips dans une parcelle, avec 1 % de plantes atteintes et un niveau d’attaque faible. 