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
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
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
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
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
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
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
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
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
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……
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> ...
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
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)
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
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
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 &&
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 &&
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
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;;
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=/;
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
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, …
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
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é
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
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 ) )
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, …
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
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
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'] ;
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, …)
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' ' ;;
}}
……
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 ;;
}}
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" " ;;
}}
}}
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é' ' ;; }}