• Aucun résultat trouvé

Le problème de la continuité le serveur web ferme la connexion Qui est connecté ?

N/A
N/A
Protected

Academic year: 2022

Partager "Le problème de la continuité le serveur web ferme la connexion Qui est connecté ?"

Copied!
5
0
0

Texte intégral

(1)

Un peu plus loin avec PHP

Le problème de la continuité le serveur web ferme la connexion Qui est connecté ?

Quels sont les droits de l'utilisateur ? Qu'a t-il déjà fait ?

Comment passer des informations de pages en pages ? Comment assurer une navigation suivie ?

Les passages de variables entre pages

Solution formulaire (GET et POST) : les variables sont accessibles dans la page cible sous la forme d'un tableau global associatif ($_GET ou

$_POST) (mais toutes les pages ne sont pas des formulaires).

Les tableaux $_GET et $_POST sont des variables globales accessibles de n’importe quelle page!

Solution du lien href (en fait, on utilise la forme du GET) : On fabrique une URL qui contient les noms des variables et leur contenu, comme le fait le navigateur avec un formulaire GET :

page.php?nom=val&nom2=val2&nom3=val3

(attention aux caractères sensibles !)

Passage de Variables

Solution formulaire Champ caché : les variables sont stockées dans un formulaire dans un champ hidden.

Grâce aux attributs value et name, on peut attribuer une valeur et un nom à ce champ caché, qui sera récupéré dans la page cible, comme n'importe quel autre champ...

Les Cookies

Le serveur web est STATELESS : Ferme la connexion aprés avoir servi la page.

Idée d'origine pour suivre la connexion : le cookie Le cookie porte un nom, et est enregistré sur le client. On y stocke des informations.

Les Cookies

- On peut, en PHP, générer un cookie, qu'on pourra ensuite rappeler, afin de savoir par exemple si l'utilisateur est déjà venu.

- La génération du cookie doit obligatoirement se faire avant toute écriture dans la page. Effectuez cette opération en début de script.

- Les cookies seront accessibles dans un tableau associatif en PHP, $_COOKIE[].

- Ce tableau est une variable globale accessible de n’importe quelle page!

5

Les Cookies

- Les cookies stockent des données sur le poste de l’utilisateur.

- Méthode peu sécurisée

- Les données sont conservées même si les fenêtres du navigateur sont fermées.

- Les données sont conservées même si le poste est éteint.

- Vous n’avez plus accés à vos informations sur une autre machine.

6

(2)

Exemple de cookie

<?php

setCookie('GNU-Association','Nouvel adhèrent',time()+12*3600);

?>

- Ici, je définis un cookie GNU-Association qui contient la valeur (nouvel adhérent). La validité de ce cookie est de 12 heures. (nom, contenu, validité)

- Puis, plus tard, je tente de l'afficher..

<?php

if (isset($_COOKIE['GNU-Association'])) echo $_COOKIE['GNU-Association'];

?>

7

La malédiction du cookie

Le problème du cookie :

Il se trouve sur le poste client !!! Aucun contrôle n’est possible de la part du serveur !

Certains utilisateurs les refusent..

Ils peuvent les modifier, en altérer le contenu.

Est ce que je peux récupèrer des cookies d'autres sites ? (par exemple, ceux déposés par un concurrent ?)

8

En théorie non, car ils sont attachés à un nom de serveur.

Solution : les sessions

Il suffit d'identifier l'utilisateur (par exemple, avec un unique cookie qui contient une valeur aléatoire), et d'associer à cette valeur tout un ensemble d'information sur le serveur (dans un fichier, lié à cette valeur). La valeur a une durée de vie limitée (30 minutes aprés sa dernière utilisation)… Donc la session sera fermée après un certain temps…

La valeur aléatoire est le numéro de session, connue à la fois du poste client et du serveur et sera utilisé pour communiquer.

Exemple de numéro de session:

Solution : les sessions

C'est le principe des Sessions. Une seule info sur le client (un cookie), et tout est sur le serveur, sous notre contrôle...

Les sessions stockent des données sur le serveur. A la fermeture d’un script, toutes les informations de sessions, sont recopiées sur le serveur afin d’être réutilisées ultérieurement.

Méthode sécurisée. On peut stocker des données sensibles.

10

Solution : les sessions

Les données sont perdues si les fenêtres du navigateur sont fermées ou si le poste est éteint. A la fermeture du navigateur la session est fermée côté client. Le cookie meurt… mais il est toujours présent ! Les données de sessions ne sont pas détruites systématiquement du côté serveur ! Attention donc aux serveurs partagés…

Vous n’avez plus accés à vos informations sur une autre machine (car ce sera une autre session).

11

Les commandes de SESSIONS: start

Les variables de sessions seront accessibles via un tableau associatif $_SESSION. Ce tableau est une variable globale accessible de n’importe quelle page!

Si vous voulez pouvoir manipuler les variables de session (qui vous permettent donc de faire passer des informations de pages en pages), il faut déclencher le mécanisme :

<?php

session_start(); // Création de la session

$_SESSION['prenom'] = 'Popaul'; // Sauvegarde dans la session créée de la variable "prenom"

?>

(3)

Les commandes de SESSIONS: start

PHP gère le mécanisme des sessions de façon automatique:

-

C’est lui qui va créer un cookie sur votre poste.

-

Si la session n’a pas été créée, session_start() la crée.

-

Si une session existe, session_start() ouvre la session existante.

<?php

session_start(); // Création de la session

$_SESSION['prenom'] = 'Popaul'; // Sauvegarde dans la session créée de la variable "prenom"

?>

13

Les commandes de SESSIONS: start

- La commande session_start() doit être appelée dans toutes les pages qui utilisent les sessions.

- La commande session_start() doit être appelée avant d’écrire dans la page. Placez-là de préférence au début de vos scripts.

14

Les commandes de SESSIONS:

Tableau $_SESSION

-

Vous pouvez ensuite directement utiliser le tableau associatif

$_SESSION.

-

Vous pouvez stocker dans votre tableau autant de variables que vous le souhaitez sous la forme:

$_SESSION['nomVariable']

-

On peut créer et utiliser les variables de session n’importe où dans le script.

Les commandes de SESSIONS: Destruction

-

Pour détruire la session (et donc perdre toutes les valeurs) :

session_destroy();

-

Pour détruire une variable session (et donc conserver toutes les autres valeurs) :

unset($_SESSION['nomVariable']);

-

N’utilisez pas la fonction “unset” sur le tableau $_SESSION (unset($_SESSION);) car vos informations de sessions ne pourront plus être enregistrées sur le serveur.

Pour faire quoi ?

On peut utiliser les sessions par exemple :

- Pour l'authentification des utilisateurs (une variable de session contient l'id de l'utilisateur. Cette variable est remplie par une page spéciale authentification.php. A chaque entrée dans une page, on vérifie l'existence de la variable : Sinon, c'est une tentative d'accès illégale, on renvoie vers la page

authentification.php)

- pour réaliser un panier (les choix du client sont stockés dans un tableau, variable de session)

-...

Exemple

page1.php

<?php

//Je démarre la session session_start();

// J'enregistre des variables de session // Son contenu peut venir de n'importe où

$_SESSION['lang'] = 'fr';

$_SESSION['heure_arrivee'] = date('Y-m-d H:i:s');

?>

<a href="page2.php">Aller sur la page suivante</a>

18

(4)

Exemple

page2.php

<?php

// Je démarre la session, vu qu'elle a déjà été créée, elle va être ouverte

session_start();

// J'affiche le contenu de mes variables

echo "La langue sélectionnée est : {$_SESSION['lang']} <br />";

echo "L'utilisateur est arrivé à : {$_SESSION['heure_arrivee']}";

19

Précautions avec les sessions

- Les sessions étant très pratiques et simples à utiliser, on pourrait avoir tendance à trop les utiliser.

- Il faut bien comprendre que les sessions permettent de stocker des données relatives à un utilisateur.

- Si vous stockez des informations communes aux utilisateurs, la taille des sessions va augmenter rapidement et si de nombreux utilisateurs sont connectés, la performance du serveur va diminuer.

20

Précautions avec les sessions

-La session n’est pas démarré automatiquement. Lorsque vous démarrez la session (session_start()), les données de la session deviennent accessibles et modifiables. Les données de la session sont donc verrouillées pour vous permettre de les modifier.

-Dans les pages où vous n’avez pas besoin de modifier les informations de session, ouvrez les données de session en lecture seule (Cf ci-après).

<?php

// Je démarre la session session_start();

// Je ferme la session en écriture session_write_close();

21

Précautions avec les sessions

Vous pouvez ouvrir plusieurs fois la session dans le même fichier…

<?php

// Je démarre la session session_start();

// Je ferme la session en écriture session_write_close();

// J’ai accès aux informations de session dans pouvoir les modifier.

…/…

//J’ai besoin de modifier une information session_start(); // ré-ouverture de la session

$_SESSION['key']='value';

session_write_close();

…/…

22

Les sessions

La valeur a une durée de vie limitée: généralement 30 minutes mais cette valeur est un paramètre du serveur.

Si vous voulez modifier la durée de vie d’une session, il faut modifier la durée de vie du cookie déposé sur le poste du client avec la commande:

session_set_cookie_params($dureeDeVie);

// La durée de vie est exprimée en secondes

session_start();

…/…

23

Les entêtes HTTP

Protocole HTTP : il permet l'échange de document : une entête HTTP caractérise le document qu'elle décrit : Son contenu (text/html, image/jpg), sa taille, sa date de création, etc...

(ne pas confondre avec le head du html, qui est une entête du contenu de la page hypertexte)

Il est possible en PHP de jouer avec les entêtes http...

Sous réserve de bien générer ces informations

AVANT tout contenu (que ce soit un simple espace,

même avant la balise <html>)

(5)

Exemple de header

Un header intéressant de page « de traitement »:

<?php

/* plein de traitement dans la base de données*/

/* Redirige le client vers une autre page*/

header("Location: accueil.php");

?>

Liens sur cookies et sessions

• Tutorial sur developpez.com.

http://php.developpez.com/cours/sessions/

• La documentation officielle des sessions sur php.net.

http://www.php.net/manual/fr/book.session.php

• La documentation officielle des cookies sur php.net.

http://www.php.net/manual/fr/features.cookies.php

• Tutorial qui prend l'exemple de la création d'un système de protection par login / mot de passe.

http://forums.mediabox.fr/wiki/tutoriaux/php/interactions/utiliser-les-sessions

26

Références

Documents relatifs

Or cette configuration manuelle peut être fastidieuse pour un nombre important de périphériques car pour chaque machine il faut entrer manuellement l'adresse IPv4, le masque

Les reines accompagnées de 10 abeilles dans les cages Benton ont une durée moyenne de vie de 1 8, 5 jours. Il est donc indiscutable que l’influence du

Il contient un identifiant unique utilisé par Google Analytics pour distinguer les différents utilisateurs et calculer différentes métriques analytiques (nombre de visiteurs,

l La réponse Y2 est évaluée à la fin du test en démontant le module et en inspectant l’état de la pâte thermique sur sa surface et sur la surface du lit d’eau. ⇒ On

5- Compléter le schéma du cycle de l’ovaire et de l’utérus en faisant apparaître les jours du cycle et la période des règles en rouge... (D1-4) 3- Réaliser le dessin d’un

Ici, dans cette boucle for, c’est l’inverse, delta_t commence à la valeur de 800 puis décroit progressivement jusqu’à 400 donc la période du son diminue donc la fréquence

Celle-ci augmente avec la profondeur : alors que nous sommes soumis à une pression d'environ 1 bar à l'air libre au niveau de la mer (pression atmosphérique), le poids de

Voici le coefficient de la vie probable que l'augmentation ainsi obtenue produit, pour chaque période d'âge, dans l'ensemble de la population, et séparément dans les villes