11:26:40 programmation web 2012-2013 1 programmation web : protocole http jérôme cutrona...

35
14:46:10 14:46:10 Programmation Web 2012-2013 Programmation Web 2012-2013 1 Programmation Web : Programmation Web : Protocole HTTP Protocole HTTP Jérôme CUTRONA Jérôme CUTRONA [email protected] [email protected]

Upload: gaetan-leger

Post on 03-Apr-2015

105 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

03:24:5003:24:50 Programmation Web 2012-2013Programmation Web 2012-2013 11

Programmation Web :Programmation Web :Protocole HTTPProtocole HTTP

Jérôme CUTRONAJérôme CUTRONA

[email protected]@univ-reims.fr

Page 2: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

2203:24:5003:24:50 Programmation Web 2012-2013Programmation Web 2012-2013

IntroductionIntroduction

HTTP : HyperText Transfer ProtocolHTTP : HyperText Transfer Protocol HTTP : Protocole du WebHTTP : Protocole du Web Protocole d'échange entre client et serveurProtocole d'échange entre client et serveur Protocole orienté ligne de caractèresProtocole orienté ligne de caractères

Dans notre cas :Dans notre cas : Étude du protocole pour la cultureÉtude du protocole pour la culture (ça rime avec torture)(ça rime avec torture)

Compréhension des cookiesCompréhension des cookies Compréhension des sessionsCompréhension des sessions Utilisation avancée de PHP (côté serveur)Utilisation avancée de PHP (côté serveur) Utilisation d’AJAXUtilisation d’AJAX

Page 3: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

3303:24:5103:24:51 Programmation Web 2012-2013Programmation Web 2012-2013

RéseauRéseau

Utilisation de HTTP/1.0Utilisation de HTTP/1.0

Client WebClient Web(Navigateur)(Navigateur)

Serveur WebServeur Web(Apache)(Apache)

Connexion TCP (port 80)Connexion TCP (port 80)

Validation de la connexionValidation de la connexion

Requête HTTPRequête HTTP

Réponse HTTPRéponse HTTPFermeture de connexionFermeture de connexion

Page 4: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

4403:24:5103:24:51 Programmation Web 2012-2013Programmation Web 2012-2013

Remarques importantesRemarques importantes

Le client ouvre la connexionLe client ouvre la connexion Le serveur ferme la connexionLe serveur ferme la connexion

1 transaction = 1 ressource transférée (v 1.0)1 transaction = 1 ressource transférée (v 1.0) Protocole sans étatProtocole sans état

Aucune information gardée entre deux transactionsAucune information gardée entre deux transactions Le serveur "oublie" le client après chaque transactionLe serveur "oublie" le client après chaque transaction

Problème pour la gestion d'une sessionProblème pour la gestion d'une session

Page 5: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

5503:24:5103:24:51 Programmation Web 2012-2013Programmation Web 2012-2013

Autres remarques importantesAutres remarques importantes

Le client demande des ressourcesLe client demande des ressources Le serveur répond aux demandes des clients :Le serveur répond aux demandes des clients :

Délivre la ressource demandée si possibleDélivre la ressource demandée si possible Informe de la raison de non remiseInforme de la raison de non remise

Echanges multi-plateformeEchanges multi-plateforme

ASCII 7bits (encodage si non ASCII 7bits)ASCII 7bits (encodage si non ASCII 7bits)

Requêtes émises en clairRequêtes émises en clair Réponses émises en clairRéponses émises en clair

Page 6: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

6603:24:5103:24:51 Programmation Web 2012-2013Programmation Web 2012-2013

Structure d'un message HTTPStructure d'un message HTTP

Orienté lignes de caractères :Orienté lignes de caractères : = retour à la ligne= retour à la ligne

Requête ou réponse :Requête ou réponse :Requête ou état Requête ou état [Entête: valeur [Entête: valeur ]][Entête: valeur [Entête: valeur ]][… [… ]]Ligne blanche Ligne blanche [Corps de message][Corps de message]

HTTP 1.0: 16 en-têtesHTTP 1.0: 16 en-têtesHTTP 1.1: 46 en-têtesHTTP 1.1: 46 en-têtes

Page 7: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

7703:24:5103:24:51 Programmation Web 2012-2013Programmation Web 2012-2013

Requête HTTP 1.0Requête HTTP 1.0

GET|POST|HEAD GET|POST|HEAD cheminchemin HTTP/1.0 HTTP/1.0

User-Agent: User-Agent: agent agent [Entête: valeur [Entête: valeur ]]

[Entête: valeur [Entête: valeur ]]

[… [… ]]

Ligne blanche Ligne blanche [Données][Données]

NetiquetteNetiquette

Page 8: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

8803:24:5103:24:51 Programmation Web 2012-2013Programmation Web 2012-2013

Méthodes de requête HTTPMéthodes de requête HTTP

GETGETdemande des informations et la ressource désignéedemande des informations et la ressource désignée

HEADHEADdemande des informations concernant la ressourcedemande des informations concernant la ressource

POSTPOSTenvoie de données (formulaire vers le serveur) et envoie de données (formulaire vers le serveur) et

demande la ressource désignéedemande la ressource désignée

PUTPUTenregistrement du corps de la requête à l ’URL indiquéeenregistrement du corps de la requête à l ’URL indiquée

DELETEDELETEsuppression de la ressource désignée par l ’URLsuppression de la ressource désignée par l ’URL

Page 9: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

9903:24:5103:24:51 Programmation Web 2012-2013Programmation Web 2012-2013

Exemple de requête HTTPExemple de requête HTTP

GET / HTTP/1.0 GET / HTTP/1.0 Ligne blanche Ligne blanche

PUT /page1.html HTTP/1.0 PUT /page1.html HTTP/1.0 User-Agent: Mozilla/5.0 (Windows; U; User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.7) Windows NT 5.1; en-US; rv:1.7.7) Gecko/20050414 Firefox/1.0.3 Gecko/20050414 Firefox/1.0.3

Ligne blanche Ligne blanche

Page 10: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

101003:24:5103:24:51 Programmation Web 2012-2013Programmation Web 2012-2013

Réponse HTTPRéponse HTTP

HTTP/HTTP/versionversion codecode phrase phrase Content-Type: Content-Type: type_mime type_mime [Entête: valeur [Entête: valeur ]]

[Entête: valeur [Entête: valeur ]]

[… [… ]]

Ligne blanche Ligne blanche [Données][Données]

ObligatoireObligatoire

Le client doit être informé de Le client doit être informé de la la nature de la ressourcenature de la ressource : :

HTMLHTMLImage JPEGImage JPEGDoc PDFDoc PDFAnimation FlashAnimation Flash……

Page 11: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

111103:24:5103:24:51 Programmation Web 2012-2013Programmation Web 2012-2013

Exemple de réponse HTTPExemple de réponse HTTP

HTTP/1.x 200 OK HTTP/1.x 200 OK Date: Mon, 25 Apr 2005 04:25:17 GMT Date: Mon, 25 Apr 2005 04:25:17 GMT Server: Apache/2.0.46 (Red Hat) Server: Apache/2.0.46 (Red Hat) X-Powered-By: PHP/4.3.2 X-Powered-By: PHP/4.3.2 Content-Type: text/html Content-Type: text/html Ligne blanche Ligne blanche <html><html>

<head><title> ...<head><title> ...

Page 12: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

121203:24:5103:24:51 Programmation Web 2012-2013Programmation Web 2012-2013

États des réponses HTTPÉtats des réponses HTTP

Codes à 3 chiffres + phraseCodes à 3 chiffres + phrase 1er chiffre : classe de réponse1er chiffre : classe de réponse

1xx1xx : Information (HTTP 1.1) : Information (HTTP 1.1) 2xx2xx : Succès : Succès

200 OK200 OK 3xx3xx : Redirection : Redirection

304 NOT MODIFIED304 NOT MODIFIED 4xx4xx : Erreur client : Erreur client

403 FORBIDDEN403 FORBIDDEN 404 NOT FOUND404 NOT FOUND

5xx5xx : Erreur serveur : Erreur serveur 500 INTERNAL ERROR500 INTERNAL ERROR

Page 13: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

131303:24:5103:24:51 Programmation Web 2012-2013Programmation Web 2012-2013

Protocole HTTP 1.1Protocole HTTP 1.1

Contexte HTTP 1.0 :Contexte HTTP 1.0 : 1 transaction1 transaction = = 1 ressource1 ressource transmise transmise PasPas de connexion de connexion persistantepersistante Mauvaise utilisation Mauvaise utilisation du cachedu cache 1 IP1 IP = = 1 serveur1 serveur Web Web

Améliorations HTTP 1.1 :Améliorations HTTP 1.1 : 1 transaction1 transaction persistante = persistante = XX ressources ressources transmises transmises Connexion Connexion persistantepersistante StandardisationStandardisation du cache du cache Découpage d'une ressource (chunk encoding)Découpage d'une ressource (chunk encoding) 1 IP1 IP = = XX serveurs serveurs Web (serveurs virtuels) Web (serveurs virtuels)

Page 14: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

141403:24:5103:24:51 Programmation Web 2012-2013Programmation Web 2012-2013

Protocole HTTP 1.1Protocole HTTP 1.1

Contraintes du client :Contraintes du client : inclure l'en-tête inclure l'en-tête HostHost:: à chacune des requêtes. à chacune des requêtes.

Le serveur physique doit savoir quel serveur virtuel Le serveur physique doit savoir quel serveur virtuel interrogerinterroger

accepter des réponses avec des données encodées accepter des réponses avec des données encodées de type de type chunkedchunked

supporter les connections persistantes, ou inclure supporter les connections persistantes, ou inclure l'en-tête l'en-tête ConnectionConnection: : closeclose à chacune des à chacune des requêtesrequêtes

supporter la réponse supporter la réponse 100100 ContinueContinue

Page 15: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

151503:24:5103:24:51 Programmation Web 2012-2013Programmation Web 2012-2013

Requête HTTP 1.1Requête HTTP 1.1

GET|POST|HEAD GET|POST|HEAD cheminchemin HTTP/1.1 HTTP/1.1 Host: Host: hôte hôte User-Agent: User-Agent: agent agent [header [header ]]

[header [header ]]

[… [… ]]

Ligne blanche Ligne blanche [Données][Données]

ObligatoireObligatoire

NetiquetteNetiquette

Page 16: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

161603:24:5203:24:52 Programmation Web 2012-2013Programmation Web 2012-2013

Soumission de formulairesSoumission de formulaires

<form action="form.php" <form action="form.php" method="GET"method="GET">>

Requête HTTP :Requête HTTP :

GET form.php?GET form.php?p1=X&p2=Yp1=X&p2=Y HTTP/1.0 HTTP/1.0 LigneLigne blanche blanche

Traduit dans l'URL : Traduit dans l'URL : http://abc/form.phphttp://abc/form.php?p1=X&p2=Y?p1=X&p2=Y

Peut donc être mis en favoriPeut donc être mis en favori

Valeurs saisies dans le formulaire :Valeurs saisies dans le formulaire :Couples Couples nom_champ=valeur_encodéenom_champ=valeur_encodée séparés séparés par par &&

Page 17: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

171703:24:5203:24:52 Programmation Web 2012-2013Programmation Web 2012-2013

Soumission de formulairesSoumission de formulaires

<form action="form.php" <form action="form.php" method="POST"method="POST">>

Requête HTTP :Requête HTTP :

POST POST index.htmlindex.html HTTP/1.0 HTTP/1.0

Content-Type:Content-Type: application/x-www-form-urlencoded application/x-www-form-urlencoded Content-Length: 9 Content-Length: 9 LigneLigne blanche blanche p1=X&p2=Yp1=X&p2=Y

NON traduit dans l'URLNON traduit dans l'URL

Ne peut donc PAS être mis en favoriNe peut donc PAS être mis en favori

Valeurs saisies dans le formulaire :Valeurs saisies dans le formulaire :Couples Couples nom_champ=valeur_encodéenom_champ=valeur_encodée séparés séparés par par &&

Page 18: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

181803:24:5203:24:52 Programmation Web 2012-2013Programmation Web 2012-2013

Encodage des donnéesEncodage des données

Protocole HTTP : ASCII 7bits (base commune à toutes Protocole HTTP : ASCII 7bits (base commune à toutes les plateformes)les plateformes)

Tout caractère non ASCII 7bits doit être encodéTout caractère non ASCII 7bits doit être encodé URLURL saisies dans les formulairessaisies dans les formulaires

Principe d’encodage :Principe d’encodage : EspaceEspace ++ Caractères spéciauxCaractères spéciaux %%code_ASCII_hexacode_ASCII_hexa Caractères accentuésCaractères accentués %%code_ASCII_hexacode_ASCII_hexa Exemples :Exemples : ô ô %F4 %F4

[ [ %5B %5B

Page 19: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

191903:24:5203:24:52 Programmation Web 2012-2013Programmation Web 2012-2013

CookiesCookies

But :But : Éviter que le serveur « oublie le client »Éviter que le serveur « oublie le client » Maintenir un « mode connecté » (= session)Maintenir un « mode connecté » (= session) Rendre transparent un échange client / serveurRendre transparent un échange client / serveur Exemple e-commerce : ajouter des articles au panierExemple e-commerce : ajouter des articles au panier

Serveur :Serveur :Set-Cookie: Set-Cookie: varvar==valval[[; expires=; expires=datedate; ; path=path=cheminchemin; domain=; domain=domainedomaine]]

Client :Client :Cookie: Cookie: varvar==valval;;

Page 20: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

202003:24:5203:24:52 Programmation Web 2012-2013Programmation Web 2012-2013

RéseauRéseau

Cookies, principe des échangesCookies, principe des échanges

Client WebClient Web(Navigateur)(Navigateur)

Serveur WebServeur Web(Apache)(Apache)

GET / HTTP/1.1GET / HTTP/1.1

HTTP/1.1 200 OKHTTP/1.1 200 OKSet-CookieSet-Cookie: Id=1212; path=/;: Id=1212; path=/;

GET /liste HTTP/1.1GET /liste HTTP/1.1CookieCookie: Id=1212: Id=1212

HTTP/1.1 200 OKHTTP/1.1 200 OK……

Id=1212;Id=1212; path=/;path=/;

Page 21: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

212103:24:5203:24:52 Programmation Web 2012-2013Programmation Web 2012-2013

CookiesCookies

Avantages :Avantages : Rappelle au serveur des informations sur le clientRappelle au serveur des informations sur le client L'échangeL'échange de la données dans le sens de la données dans le sens

serveur serveur client client est est limitélimité au dépôt du cookie au dépôt du cookie Ne nécessite Ne nécessite paspas de de modifiermodifier les les pagespages HTMLHTML CompatibleCompatible avec les avec les formulairesformulaires Le Le cookiecookie a une a une durée de validitédurée de validité

Inconvénients :Inconvénients : Les Les données circulent en permanencedonnées circulent en permanence dans le sens dans le sens

client client serveur serveur Les Les données circulent en clairdonnées circulent en clair sur le réseau sur le réseau La La quantitéquantité de données doit être de données doit être limitéelimitée

Page 22: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

222203:24:5203:24:52 Programmation Web 2012-2013Programmation Web 2012-2013

Cookies en PHPCookies en PHP

Placer un cookie sur le client :Placer un cookie sur le client :boolbool setcookiesetcookie( ( stringstring namename [, [, stringstring valuevalue [, [, intint expireexpire [, [, stringstring pathpath [, [, stringstring domaindomain [, [, boolbool securesecure [, [, boolbool httponlyhttponly ]]]]]] ) ]]]]]] )

Nom du cookieNom du cookieValeur du cookieValeur du cookieDate d'expiration (timestamp UNIX) :Date d'expiration (timestamp UNIX) :Dans 10 jours : time()+10*24*60*60Dans 10 jours : time()+10*24*60*60Si non précisé, expire à la fermeture du Si non précisé, expire à la fermeture du navigateurnavigateur

Chemin de validité, disponibilité :Chemin de validité, disponibilité :// tout le serveur tout le serveur/prive/prive sous-arborescence "prive" sous-arborescence "prive"Par défaut : répertoire où le cookie est définiPar défaut : répertoire où le cookie est défini

Domaine de validité, disponibilité :Domaine de validité, disponibilité :example.comexample.com le domaine example.comle domaine example.comwww.example.comwww.example.com le sous-domaine www.example.comle sous-domaine www.example.com

Cookie sécurisé ?Cookie sécurisé ?truetrue uniquement si HTTPS uniquement si HTTPSfalsefalse défaut, HTTP et HTTPS défaut, HTTP et HTTPS

Cookie uniquement par HTTP ?Cookie uniquement par HTTP ?truetrue uniquement HTTP uniquement HTTPfalsefalse défaut, HTTP, JavaScript, … défaut, HTTP, JavaScript, …

Page 23: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

232303:24:5203:24:52 Programmation Web 2012-2013Programmation Web 2012-2013

Cookies en PHPCookies en PHP

Vérifier la présence d'un cookie :Vérifier la présence d'un cookie : tableau associatif superglobal tableau associatif superglobal $_COOKIE$_COOKIE ex : cookie 'passage' ex : cookie 'passage' $_COOKIE['passage']$_COOKIE['passage']

Remarques utiles :Remarques utiles : Le Le cookiecookie doit être doit être placéplacé avant avant echoecho (en-tête HTTP) (en-tête HTTP) Le Le cookiecookie placé avec placé avec setcookie()setcookie() n'est n'est accessibleaccessible

qu'qu'auau prochainprochain chargementchargement de page : de page :En-tête HTTP Set-Cookie: suivi de l'en-tête HTTP En-tête HTTP Set-Cookie: suivi de l'en-tête HTTP Cookie: à la demande de page suivanteCookie: à la demande de page suivante

EffacerEffacer unun cookiecookie déjà placé : déjà placé :le replacer avec les le replacer avec les mêmesmêmes paramètresparamètres mais avec mais avec une une valeurvaleur videvide ou false ou false

Page 24: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

242403:24:5203:24:52 Programmation Web 2012-2013Programmation Web 2012-2013

SessionsSessions

Stockage sur le serveurStockage sur le serveur de de données associées à données associées à un clientun client particulier particulier

Nécessite une Nécessite une identification unique pertinente et identification unique pertinente et persistante des clientspersistante des clients Identifiant de sessionIdentifiant de session (MD5 128bits / SHA-1 160bits) (MD5 128bits / SHA-1 160bits) Persiste par Persiste par paramètre d'URLparamètre d'URL ou ou cookiecookie

Évite l'échange permanent de donnéesÉvite l'échange permanent de données (en (en dehors de l'identifiant)dehors de l'identifiant)

Nécessite la Nécessite la linéarisationlinéarisation desdes variablesvariables pour leur pour leur stockage (fichier, BD, personnalisé)stockage (fichier, BD, personnalisé)

Simule un Simule un mode connectémode connecté

Page 25: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

252503:24:5203:24:52 Programmation Web 2012-2013Programmation Web 2012-2013

SessionsSessions

RéseauRéseau

Client 1Client 1

ServeurServeur

AA

Démarrer sessionDémarrer sessionid : Aid : A

Données deDonnées desession pour Asession pour A

GET /GET /Set-Cookie: …Set-Cookie: …Cookie: …Cookie: …OK: …OK: …

Client 2Client 2

BB

Démarrer sessionDémarrer sessionid : Bid : B

Données deDonnées desession pour Bsession pour B

GET /GET /Set-Cookie: …Set-Cookie: …Cookie: …Cookie: …OK: …OK: …

CookieCookieid : Aid : A

CookieCookieid : Bid : B

Page 26: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

262603:24:5203:24:52 Programmation Web 2012-2013Programmation Web 2012-2013

SessionsSessions

Créer ou restaurer une sessionCréer ou restaurer une session boolbool session_start session_start ( ( voidvoid ) )

Manipuler les Manipuler les données de sessiondonnées de session Tableau associatif superglobal Tableau associatif superglobal $_SESSION$_SESSION

Lire ou définir l'identifiant de sessionLire ou définir l'identifiant de session stringstring session_id session_id ( [( [stringstring idid] )] )

Détruire toutes les variables d'une session Détruire toutes les variables d'une session voidvoid session_unsetsession_unset ( ( voidvoid ) )

Détruire une sessionDétruire une session boolbool session_destroysession_destroy ( ( voidvoid ) )

Page 27: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

272703:24:5303:24:53 Programmation Web 2012-2013Programmation Web 2012-2013

SessionsSessions

Modifie les paramètres du cookie de sessionModifie les paramètres du cookie de sessionvoidvoid session_set_cookie_paramssession_set_cookie_params ( (

intint lifetimelifetime[, [, stringstring pathpath[, [, stringstring domaindomain[, [, boolbool securesecure[, [, boolbool httponlyhttponly ]]]] ]]]]

))Date d'expiration (timestamp UNIX) :Date d'expiration (timestamp UNIX) :Dans 10 jours : time()+10*24*60*60Dans 10 jours : time()+10*24*60*60Si non précisé, expire à la fermeture du Si non précisé, expire à la fermeture du navigateurnavigateur

Chemin de validité, disponibilité :Chemin de validité, disponibilité :// tout le serveur tout le serveur/prive/prive sous-arborescence "prive" sous-arborescence "prive"Par défaut : répertoire où le cookie est définiPar défaut : répertoire où le cookie est défini

Domaine de validité, disponibilité :Domaine de validité, disponibilité :example.comexample.com le domaine example.comle domaine example.comwww.example.comwww.example.com le sous-domaine www.example.comle sous-domaine www.example.com

Cookie sécurisé ?Cookie sécurisé ?truetrue uniquement si HTTPS uniquement si HTTPSfalsefalse défaut, HTTP et HTTPS défaut, HTTP et HTTPS

Cookie uniquement par HTTP ?Cookie uniquement par HTTP ?truetrue uniquement HTTP uniquement HTTPfalsefalse défaut, HTTP, JavaScript, … défaut, HTTP, JavaScript, …

Page 28: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

282803:24:5303:24:53 Programmation Web 2012-2013Programmation Web 2012-2013

RéseauRéseau

Procédure d'authentificationProcédure d'authentification

ClientClient ServeurServeur

Base deBase dedonnéesdonnées

loginlogin

passpass

??ProblèmeProblème

Le données circulentLe données circulenten clair sur le réseauen clair sur le réseau

ProblèmeProblèmeInjection de code SQLInjection de code SQL requêtes préparéesrequêtes préparées

Page 29: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

292903:24:5303:24:53 Programmation Web 2012-2013Programmation Web 2012-2013

RéseauRéseau

Procédure d'authentification sécuriséeProcédure d'authentification sécurisée

ClientClient ServeurServeur

Base deBase dedonnéesdonnées

CodageCodage??ProblèmeProblèmeInjection de code SQLInjection de code SQL requêtes préparéesrequêtes préparées

challengechallengechallengechallenge

CodageCodagedonnéedonnée

loginlogin

passpassdonnéedonnée

challengechallenge

SécuritéSécuritéLe données qui circulentLe données qui circulent

sont propressont propresà chaque connexionà chaque connexion

DonnéesDonnéesde sessionde session

Page 30: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

303003:24:5303:24:53 Programmation Web 2012-2013Programmation Web 2012-2013

Sérialisation d'objetsSérialisation d'objets

Les Les objetsobjets peuvent être peuvent être stockésstockés dansdans les les données de données de sessionsession Linéarisation de l'objet Linéarisation de l'objet réduit à une chaîne réduit à une chaîne Impossible pour le type ressourceImpossible pour le type ressource Impossible pour les références croiséesImpossible pour les références croisées Restauration possible (PHP >= 4)Restauration possible (PHP >= 4)

session_start() ;session_start() ;$p = new Point(12, 15) ;$p = new Point(12, 15) ;$_SESSION['monpoint'] = $p ;$_SESSION['monpoint'] = $p ;

session_start() ;session_start() ;

$p = $_SESSION['monpoint'] ;$p = $_SESSION['monpoint'] ;

Page 31: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

313103:24:5303:24:53 Programmation Web 2012-2013Programmation Web 2012-2013

Sérialisation d'objetsSérialisation d'objets

Méthodes magiques Méthodes magiques __sleep__sleep et et __wakeup__wakeup __sleep__sleep

Appelée Appelée avant la linéarisationavant la linéarisation Doit retourner un tableau contenant le nom des Doit retourner un tableau contenant le nom des

attributs à linéariserattributs à linéariser Choix des attributs à sauvegarderChoix des attributs à sauvegarder Terminer correctement l'objet (déconnexion BD, Terminer correctement l'objet (déconnexion BD,

ressource ouverte, requête en cours, …)ressource ouverte, requête en cours, …)

__wakeup__wakeup Appelée Appelée après la délinéarisationaprès la délinéarisation Restaurer des attributs non sauvegardés (BD, …)Restaurer des attributs non sauvegardés (BD, …)

Page 32: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

323203:24:5303:24:53 Programmation Web 2012-2013Programmation Web 2012-2013

Sérialisation : exempleSérialisation : exemple

classclass Point Point {{

privateprivate $$coordcoord ;;

privateprivate $$infoinfo ;;

publicpublic functionfunction __construct(__construct($$_x_x, , $$_y_y)) {{

ifif ((!!is_numericis_numeric(($$_x_x)) |||| !!is_numericis_numeric(($$_y_y)))) {{

throwthrow newnew ExceptionException((

""Paramètres non numériques (Paramètres non numériques ($$_x_x, , $$_y_y))"")) ;;

}}

$$thisthis->->coordcoord[[''xx'']] == $$_x_x ;;

$$thisthis->->coordcoord[[''yy'']] == $$_y_y ;;

$$thisthis->->info info == ' 'NouveauNouveau' ' ;;

}}

……

Page 33: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

333303:24:5303:24:53 Programmation Web 2012-2013Programmation Web 2012-2013

Sérialisation : exempleSérialisation : exemple

publicpublic functionfunction __get(__get($$_prop_prop)) {{

ifif ((!!array_key_existsarray_key_exists(($$_prop_prop, , $$thisthis->->coordcoord)))) { {

throwthrow newnew ExceptionException((

""Accès à une propriété inconnue (Accès à une propriété inconnue ($$_prop_prop))"")) ;;

}}

returnreturn $$thisthis->->coordcoord[[$$_prop_prop]] ;;

}}

publicpublic functionfunction __set(__set($$_prop_prop, , $$_val_val)) {{

ifif ((!!is_numericis_numeric(($$_val_val))))

throwthrow newnew ExceptionException((""Valeur non numérique (Valeur non numérique ($$_val_val))""));;

ifif ((!!array_key_existsarray_key_exists(($$_prop_prop, , $$thisthis->->coordcoord))))

throwthrow newnew ExceptionException((

""Accès à une propriété inconnue (Accès à une propriété inconnue ($$_prop_prop))"")) ;;

returnreturn $$thisthis->->coordcoord[[$$_prop_prop]] == $$_val_val ;;

}}

Page 34: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

343403:24:5303:24:53 Programmation Web 2012-2013Programmation Web 2012-2013

Sérialisation : exempleSérialisation : exemple

publicpublic functionfunction __sleep()__sleep() {{

returnreturn arrayarray((''coordcoord'')) ;;

}}

publicpublic functionfunction __wakeup()__wakeup() {{

$$thisthis->->info info == ' 'RestauréRestauré' ' ;;

}}

publicpublic functionfunction affiche affiche()() {{

echoecho " "<pre><pre>\n\n" " ;;

var_dumpvar_dump(($$thisthis)) ;;

echoecho " "</pre></pre>\n\n" " ;;

}}

}}

Page 35: 11:26:40 Programmation Web 2012-2013 1 Programmation Web : Protocole HTTP Jérôme CUTRONA jerome.cutrona@univ-reims.fr

353503:24:5303:24:53 Programmation Web 2012-2013Programmation Web 2012-2013

Sérialisation : exempleSérialisation : exemple

<?php<?php

require_oncerequire_once((''point.inc.phppoint.inc.php'')) ;;

session_startsession_start()() ;;

$$pp == newnew Point Point((11, , 1212)) ;;

$$_SESSION[_SESSION[''pointpoint'']] == $$pp ;;

?>?>

<?php<?php

require_oncerequire_once((''point.inc.phppoint.inc.php'')) ;;

session_startsession_start()() ;;

$$pp == $$_SESSION[_SESSION[''pointpoint'']] ;;

$$pp->->afficheaffiche()() ;;

?>?>

Linéarisation :Linéarisation :appel de appel de __sleep()__sleep()

Délinéarisation :Délinéarisation :appel de appel de __wakeup()__wakeup()

object(Point)#1 (2) {object(Point)#1 (2) { ["coord:private"["coord:private" => array(2) {=> array(2) { ["x"]=> int(1)["x"]=> int(1) ["y"]=> int(12) }["y"]=> int(12) } ["info:private"]=>["info:private"]=> string(8) "Restauré"string(8) "Restauré"} }

publicpublic functionfunction __wakeup()__wakeup() {{ $$thisthis->->info info == ' 'RestauréRestauré' ' ;; }}