12. Dades del servidor, de la sessió i cookies
Índex
Dades del servidor
Quan un ordinador client es posa en contacte amb un ordinador servidor per sol·licitar un document, es genera en el sevidor un vector associatiu, $_SERVER, que conté una sèrie de dades sobre el servidor, el client i la connexió. El nombre exacte de termes d'aquest vector depèn del model del servidor, però els més útils són comuns a tots. Els principals termes són els següents:
| $_SERVER['SERVER_ADDR'] |
Adreça IP del servidor. |
| $_SERVER['REMOTE_ADDR'] |
Adreça IP de l'ordinador client. |
| $_SERVER['DOCUMENT_ROOT'] |
Directori on hi ha el document sol·licitat. |
| $_SERVER['REQUEST_URI'] |
Valor URI subministrat per a accedir al document. |
| $_SERVER['REQUEST_TIME'] |
Moment de la sol·licitud. |
- <table class="q">
- <tr>
- <td class="q">Adreça IP del servidor</td>
- <td class="q"><?php echo $_SERVER['SERVER_ADDR']; ?> // Presentació d'una dada
- </tr>
- <tr>
- <td class="q">Adreça IP del client</td>
- <td class="q"><?php echo $_SERVER['REMOTE_ADDR']; ?> // Id.
- </tr>
- <tr>
- <td class="q">Directori on hi ha el document sol·licitat</td>
- <td class="q"><?php echo $_SERVER['DOCUMENT_ROOT']; ?> // Id.
- </tr>
- <tr>
- <td class="q">URI sol·licitada</td>
- <td class="q"><?php echo $_SERVER['REQUEST_URI']; ?> // Id.
- </tr>
- <tr>
- <td class="q">Temps de la sol·licitud</td>
- <td class="q"><?php echo $_SERVER['REQUEST_TIME']; ?> // Id.
- </tr>
- </table>
Vegeu-ne el resultat
Variables de sessió
Una variable de sessió és una variable dotada d'un nom i d'un valor que existeix exclusivament entre el moment en què es crea i el moment en què finalitza la sessió. Les variables de sessió es dipositen en un vector associatiu anomenta $_SESSION.
Per a desar i recuperar variables de sessió cal fer ús de la funció session_start().
Aquesta funció ha d'ésser inicial absoluta en el document PHP.
L'assignació d'una variable de sessió es fa així:
Les variables de sessió es recuperen mitjançant
- Document inicial, sense codi PHP, dotat d'un formulari.
- <?php
- session_start(); // Activem $_SESSION
- $_SESSION['nom'] = $_POST['n']; // Conversió de la variable rebuda en variable de sessió
- ?>
-
- (...)
-
- <?php
- echo "<p> </p>";
- echo "<p>Hola, " . $_SESSION['nom'] . "</p>"; // Ús de la variable de sessió
- ?>
-
- <p><a href="12d.php">Un altre document</a></p>
- <?php
- session_start(); // Activem $_SESSION
- ?>
-
- (...)
-  
- <?php
- echo "<p> </p>";
- echo "<p>Personalitzat per a " . $_SESSION['nom'] . "</p>"; // Un altre ús de la variable de sessió
- ?>
-
- <p>Aquest és un altre document.</p>
Vegeu-ne el resultat
Cookies
Creem una cookie amb la funció setcookie():
- setcookie("nom","valor","caducitat","/");
L'aplicació de la funció setcookie() s'ha de dur a terme obligatòriament abans de qualsevol altra instrucció, fins i tot <html>.
Les cookies creades constitueixen un vector associatiu, dins el qual són identificades pel nom,
que en permet la recuperació.
El paràmetre "/" indica que la cookie serà disponible en tot el domini; si s'especifica "/foo", només serà disponible en el propi directori.
El valor de la caducitat sol indicar-se com a suma del moment actual, time(), i del termini de validesa, expressat en segons. Així, per a fixar la caducitat en un any, serà
Si no s'hi fixa caducitat, o si s'hi fixa el valor 0, la cookie caduca al final de la sessió.
Per suprimir una cookie cal sobreescrire-la amb una data de caducitat anterior al moment present; generalment es fa amb l'expressió
o anàloga.
- <p style="text-align: right">
- <a href="12f.php?ll=cat">Català</a> // Tria i tramesa GET
- <br />
- <a href="12f.php?ll=esp">Espanyol</a> // Idem
- <br />
- <a href="12f.php?ll=eng">Anglès</a> // Idem
- </p>
- <p> </p>
- <p>
- <img style="float: right; margin: 20px; border: none" src="12e.jpg" alt="Sofre natiu" />
-
- <?php
-
- if (isset ($_COOKIE['idioma'])){ // Hi ha una cookie de nom 'idioma'?
- if ($_COOKIE['idioma'] == "e") { include "12i.txt"; } // Si té el valor 'e', text en espanyol
- if ($_COOKIE['idioma'] == "a") { include "12g.txt"; } // Si té el valor 'a', text en anglès
-
- }else{
- include "12h.txt"; // Si no existeix (situació per defecte), text en català
- }
-
- ?>
-
- </p>
Aquest document permet fer la tria i després l'aplica. Podria haver-hi, a més, tants documents com volguéssim que simplement apliquessin la tria feta inicialment.
- <?php
-
- if ($_GET['ll'] == "esp") {
- setcookie("idioma","e",time()+60*60*24*30,"/"); // Dóna a la cookie el valor 'e'
- }
- if ($_GET['ll'] == "eng") {
- setcookie("idioma","a",time()+60*60*24*30,"/"); // Dóna a la cookie el valor 'a'
- }
- if ($_GET['ll'] == "cat") {
- setcookie("idioma","",time()-100000,"/"); // Suprimeix la cookie
- }
-
- ?>
-
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" lang="ca" xml:lang="ca">
- <head>
- <meta name="author" content="AVL Dissey Web" />
- <meta http-equiv="Contents" content="Curs de PHP" />
- <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
- <meta http-equiv="refresh" content="0;url=12e.php" />
- <title>PHP + MySQL (Notes elementals)</title>
- <link rel="stylesheet" href="estil.css" type="text/css" />
- </head>
- (...)
Notem que aquest document fixa el valor de la cookie (o l'elimina) i retorna immediatament a l'anterior mitjançant un refresh.
Vegeu-ne el resultat
Feu una tria d'idioma. Sortiu del document, tanqueu l'ordinador, enceneu-lo de nou i torneu a entrar al document. Observeu com es respecta la tria feta: durant un any llevat que es faci una tria nova.
En lloc de $_COOKIE tambés es pot fer servir $_REQUEST que, com sabem, també pot substituir $_GET i $_POST.