GET /~luc/WEB_AVANCE/s5-intro.html HTTP/1.1 Host: www.greyc.ensicaen.fr
HTTP/1.1 200 OK Content-type: text/html <html>...</html>
Notez le saut de ligne ! Il marque la fin de l'en tête et le début du contenu du message.
Notez également que text/html peut être remplacé par n'importe quel type-mime.
GET /~luc/WEB_AVANCE/s5-intro.html HTTP/1.1 Host: www.greyc.ensicaen.fr
HTTP/1.1 200 OK Content-type: text/html Set-Cookie: name=value; expires=date; path=/; domain=www.greyc.ensicaen.fr <html>...</html>
Set-Cookie: name=value; expires=date; path=/; domain=www.greyc.ensicaen.fr
Set-Cookie: name=value; expires=date; path=/; domain=www.greyc.ensicaen.fr
Wdy, DD-Mon-YYYY HH:MM:SS GMT
Exemple, Mercredi 20 août 2008 à 21h05:Wed, 20-08-2008 21:05:00 GMT
#!/bin/sh expires=`date -d '+1 hour' +"%a, %d-%b-%Y %T GMT"` echo "Content-type: text-html" echo "Set-Cookie: seen=yes;expires=$expires" echo "" echo "<html><head><title>Hello</title></head><body><h1>" if echo $HTTP_COOKIE | grep -q seen then echo "Je vous ai déja vu quelque part" else echo "Hello Etranger" fi echo "</h1></body></html>"
#!/bin/sh get_val() { name=$1 if [ "$HTTP_COOKIE" = "" ] then echo return -1 fi ifs=$IFS IFS=";" set $HTTP_COOKIE IFS=$ifs for egal in $* do var=`echo $egal | cut -d"=" -f1` if [ $var = $name ] then echo $egal | cut -d"=" -f2 return 0 fi done echo "" return -2 }
setcookie(name, value, expire,path,domain);
<?php setcookie("seen", "yes", time()+3600); ?> <html> <head><title>Hello</title></head> <body><h1> <? if(isset($_COOKIE["seen"])) echo "Je vous ai déja vu quelque part"; else echo "Hello Etranger"; ?> </h1> </body> </html>
document.cookie = "name=value; expires=date; path=path; domain=domain";
var1=val1; var2=val2;...
<script language="Javascript"> var seen=true; if((document.cookie.length==0)||(document.cookie.indexOf("seen=")==-1)) { document.write("Hello Etranger!"); seen=false; } date=new Date(); date.setTime(date.getTime()+60*60*1000); document.cookie="seen=yes; expires="+date.toGMTString()+"; path=/"; if(seen) document.write("Je vous ai déjà vu quelque part.."); </script>
function createCookie(name,value,days,hours) { if (days||hours) { var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)+(hours*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else var expires = ""; document.cookie = name+"="+value+expires+"; path=/"; } function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; } function eraseCookie(name) { createCookie(name,"",-1); }
Un site de démonstration utilisant ce système est disponible ici.
bool session_start ( void )
Si la clé est transmise par
cookie, le start_session doit être positionné avant toute balise HTML
<?php // page1.php session_start(); echo 'Welcome to page #1'; $_SESSION['favcolor'] = 'green'; $_SESSION['time'] = time(); // Works if session cookie was accepted echo '<br /><a href="page2.php">page 2</a>'; // Or maybe pass along the session id, if needed echo '<br /><a href="page2.php?' . SID . '">page 2</a>'; ?>
bool session_destroy(void)
<?php // Initialize the session. // If you are using session_name("something"), don't forget it now! session_start(); // Unset all of the session variables. $_SESSION = array(); // If it's desired to kill the session, also delete the session cookie. // Note: This will destroy the session, and not just the session data! if (isset($_COOKIE[session_name()])) setcookie(session_name(), '', time()-42000, '/'); // Finally, destroy the session. session_destroy(); ?>
AJAX(Asynchronous Javascript and Xml) est une méthode permettant d'interroger un serveur http a partir d'un navigateur et du language Javascript. Son avantage est de permettre une plus grande réactivité de l'interface par rapport au web classique.
Cette partie du cours est inspirée des cours de :requeteHTTP=new XmlHttpRequest();
requetteHttp=new ActiveXobject("Microsoft.XMLHTTP");
requetteHttp=new ActiveXobject("Msxml2.XMLHTTP");
Valeurs | |
0 | Uninitialized |
1 | Loading, |
2 | Loaded, |
3 | Interactive, |
4 | Completed |
<script type="text/javascript" src="ajax.js"> </script> <script type="text/javascript"> function sendRequest(url) { var requeteHttp=getRequestHttp(); if(requeteHttp==null) { alert("Impossible d'utiliser Ajax sur ce navigateur"); } else { requeteHttp.open('GET',url,false); requeteHttp.send(null); if(requeteHttp.readyState==4) // requete achevé. Résultat transmis { if(requeteHttp.status==200)// fin correcte de la requete alert(requeteHttp.responseText); //affichage du message else alert("Error :"+requeteHttp.status+",La requete ne s'est pas correctement executée"); } } return true; } </script> </head> <body> <h1>Page 1 Ajax</h1> <a href="#" onclick="return sendRequest('page2.php?messg=coucou');"> requete</a>
document.getElementById("toto").innerHTML=response;
header("Cache-Control: no-cache, must-revalidate"); echo date('h:i:s');Notez l'utilisation du header pour forcer le rechargement de la page par le navigateur.
var requeteHttp=getRequestHttp(); if(requeteHttp==null) { alert("Impossible d'utiliser Ajax sur ce navigateur"); } else { requeteHttp.open('GET',url,true); requeteHttp.onreadystatechange=process_request(); requeteHttp.send(null); ...
function sendRequest(url) { var requeteHttp=getRequestHttp(); if(requeteHttp==null) { alert("Impossible d'utiliser Ajax sur ce navigateur"); } else { requeteHttp.open('GET',url,true); requeteHttp.onreadystatechange=function (){ process_request(requeteHttp); }; requeteHttp.send(null); } return true; }
requeteHttp.open('POST',url,true); requeteHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
requeteHttp.send(var1=val1&var2=val2&....)
function postRequestWithParam(url,param) { var requeteHttp=getRequestHttp(); if(requeteHttp==null) { alert("Impossible d'utiliser Ajax sur ce navigateur"); } else { requeteHttp.open('POST',url,true); requeteHttp.onreadystatechange=function (){ process_request(requeteHttp); }; requeteHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); requeteHttp.send(param); } return true; }
<?xml version="1.0" encoding="utf-8"?> <hotels> <hotel prix="48"> <name>Chez René **</name> <tel>33.(0)5.59.69.46.28.</tel> </hotel> <hotel prix="56"> <name>Hotel Constance </name> <tel> 33.(0)5.69.29.19.36.</tel> </hotel> </hotels>
Code | Type | ||
1 | Element | ||
2 | attribut (d'un noeud) | ||
3 | texte | ||
9 | Document |
nom | Type | Modifiable | Description |
nodeName | Chaîne | Non | Le nom de ce noeud, qui dépend de son type; voir la table ci-dessus. |
nodeValue | Chaîne | Oui | La valeur de ce noeud, qui dépend de son type; voir la table ci-dessus. |
nodeType | Entier | Non | Un code représentant le type d'objet sous-jacent, tel que défini ci-dessus. |
parentNode | Node | Non | Le parent de ce noeud. |
childNodes | NodeList | Non | La liste de noeuds constituée des enfants du noeud. |
firstChild | Node | Non | Le premier enfant de ce noeud Si un tel noeud n'existe pas, la valeur null est retournée. |
lastChild | Node | Non | Le dernier enfant de ce noeud Si un tel noeud n'existe pas, la valeur null est retournée. |
previousSibling | Node | Non | Le noeud qui précède immédiatement le noeud courant. Si un tel noeud n'existe pas, la valeur null est retournée. |
nextSibling | Node | Non | Le noeud qui suit immédiatement le noeud courant. Si un tel noeud n'existe pas, la valeur null est retournée. |
for(i=0;i<list.length;i++) { n=list.item(i); ... }
nom | Type | Modifiable | Description |
name | Chaîne | Non | Retourne le nom de l'attribut courant. |
specified | booleen | Non | Prend la valeur true si une valeur a été explicitement donnée à l'attribut courant dans le document original ; false sinon. |
value | Chaîne | Oui | A l'utilisation, la valeur de l'attribut est retournée comme une chaîne de caractères. Les entités caractères et les entités générales de référence sont remplacées par leurs valeurs. |
...requeteHttp.onreadystatechange=function(){afficher_alert(requeteHttp);};... et function afficher_alert(requeteHttp) { var hotels=requeteHttp.responseXML.getElementsByTagName("hotel"); for(i=0;i<hotels.length;i++) { var hotel=hotels.item(i); var prix =hotel.getAttributeNode("prix").value; // var name=hotel.getElementsByTagName("name").item(0).firstChild.nodeValue; var name=hotel.childNodes.item(1).firstChild.nodeValue; var tel=hotel.getElementsByTagName("tel").item(0).firstChild.nodeValue; alert("prix="+prix+"name="+name+"tel="+tel); } }
function afficher_alert2(requeteHttp) { var hotels=requeteHttp.responseXML.getElementsByTagName("hotel"); var obj=document.getElementById("answer1"); obj.innerHTML="
function afficher_table(requeteHttp) { var titles=Array("Prix","Nom","Tel"); var values=Array(); var hotels=requeteHttp.responseXML.getElementsByTagName("hotel"); var obj=document.getElementById("answer"); var table=document.createElement("table"); var oldTables=obj.getElementsByTagName("table"); if(oldTables.length==1) obj.replaceChild(oldTables.item(0),table); table.setAttribute("border","1"); var tr=document.createElement("tr"); var td; for(i=0;i<3;i++) { td=document.createElement("td"); td.appendChild(document.createTextNode(titles[i])); tr.appendChild(td); } table.appendChild(tr); for(i=0;i<hotels.length;i++) { var hotel=hotels.item(i); values[0] = hotel.getAttributeNode("prix").value; values[1] = hotel.getElementsByTagName("name").item(0).firstChild.nodeValue; values[2] = hotel.getElementsByTagName("tel").item(0).firstChild.nodeValue; tr=document.createElement("tr"); for(j=0;j<3;j++) { td=document.createElement("td"); td.appendChild(document.createTextNode(values[j])); tr.appendChild(td); } table.appendChild(tr); } obj.appendChild(table); }
<li> <a href="#" onclick="javascript:post_sendRequest('hotels.xml',afficher_table);"> DOM</a></li> </ul> <div id="answer"></div>
<?xml version="1.0" encoding="iso-8859-1"?> <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">afin de précise la version de rss utilisée.
header('Content-type: application/atom+xml'); $dbconn=connexion(); function display_news($query,$i) { echo "item\n"; echo "title".pg_fetch_result($query,$i,2)."/title\n"; echo "description".pg_fetch_result($query,$i,3)."/description\n"; echo "pubDate".pg_fetch_result($query,$i,1)."/pubDate\n"; echo "link".pg_fetch_result($query,$i,4)."/link\n"; echo "/item\n"; } echo '?xml version="1.0" encoding="utf-8"?'; ?> rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" channel titleIAPR TC 15 RSS/title descriptionIAPR TC15 news /description image urlhttp://www.greyc.ensicaen.fr/iapr-tc15/images/gbr_logo.jpg/url linkhttp://www.greyc.ensicaen.fr/iapr-tc15//link /image <? $requete="select date of last update"; $query=pg_query($dbconn,$requete); echo "lastBuildDate".pg_fetch_result($query,0,0)."/lastBuildDate\n"; pg_free_result($query); ?> linkhttp://www.greyc.ensicaen.fr/iapr-tc15/rss.php/link <? $requete="select features of news order by date desc"; $query=pg_query($dbconn,$requete); if(!$query){ echo "Query error :".$requete; exit;} for($i=0;$i<pg_num_rows($query);$i++) display_news($query,$i); pg_free_result($query);pg_close($dbconn); /channel/rss