Enrere
Mòdul 3
Creació i gestió d'entorns web dinàmics (PHP)
  Pràctica
1
2
3
4
   
Exercicis
Exercicis
 
 

 

   
  Introducció a les sessions
   
 

En aquesta pràctica veurem:

  • Una introducció a les sessions: què són i com funcionen.
   
   
  Treballant amb sessions
   
 

Hem vist que els cookies ens permetien mantenir una informació de variables més enllà d'un únic script. Però hem vist també dues coses més:

  • Que cal que el navegador tingui aquesta opció habilitada.
  • Que es desa en l'ordinador local o client.

Per tant, si l'usuari deshabilita aquesta possibilitat, es tanca la porta a aquest manteniment de valors entre scripts. A part d'això, també hi ha navegadors que no accepten cookies.

El PHP proporciona un altre camí alternatiu per fer aquesta mateixa feina però d'una manera diferent: les variables de sessió. Es tracta de variables que estan disponibles, en qualsevol script, en el temps que l'usuari necessiti fer ús d'una aplicació. La sessió comença quan l'usuari es connecta a l'aplicació i s'acaba quan desconnecta, tanca el navegador o ha passat un temps (fixat pel sistema) sense que l'usuari interaccioni amb l'aplicació.

Les variables de sessió, a diferència de les galetes, s'emmagatzemen en el servidor.

Així, doncs, dins d'una sessió podem tenir un conjunt de variables que es mantenen a través dels diferents scripts d'una aplicació. Podem desar amb aquest sistema, per exemple, l'identificador d'un usuari, l'idioma preferent, un curs o grup, etc., i tenir-los disponibles en qualsevol script mentre no es tanqui la sessió.

El PHP proporciona un seguit de funcions relacionades amb les sessions.

   
   
  Sessions en acció
Pràctica

Veurem ara un exemple de com es mantenen els valors dins d'una sessió. En el primer fitxer obrirem un formulari en què hi entrarem unes dades que s'aniran transmetent cap als altres fitxers mentre duri la sessió. Treballarem amb els següents fitxers de codi:

  • entra.htm: un formulari en què hi entrarem les dades a transmetre.
  • rebuda.php: una pàgina en què es rebrà el contingut del formulari i clicant sobre Segueix es passa a un nou script: passant.php, transferint pel mètode GET el nom de la sessió i el seu identificador
  • passant.php: recull les variables de sessió enviada i en mostra els valors a la pantalla. Clicant sobre Segueix tornem a repetir el procés de transferència de les variables de sessió a l'script següent.
  • passant2.php: es recullen de nou els valors de variable de sessió i es tornen a transmetre.
  • passant3.php: es recullen de nou els valors de variable de sessió, es mostren i s'esborren amb la funció session_unset(), de manera que si actualitzeu la pàgina amb el navegador, veureu que els valors han desaparegut.

Cadascuna d'aquestes pàgines mostrarà el nom de l'script a la part superior i un color de fons diferenciat per evitar confusions.

   
  El codi
  En primer lloc, podeu veure el codi de la pàgina html que permet entrar les dades d'identificació. Copieu al vostre editor el codi que ve a continuació i deseu-lo amb el nom de entra.html. Cal dir que aquest formulari ha estat creat gràficament amb Dreamweaver.
   
Veure codi

Executar codi

<!--------------------------------------------------------
* Mòdul: 3 Pràctica: 4 Fitxer: entra.html
* Autor: D116 Data:
* Descripció: Formulari entrada de dades
* Pre condi.:
* Post cond.: Cal que hi hagi definit el fitxer 'rebuda.php'
----------------------------------------------------------->

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Entra les dades</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>

<h2>Passant valors de variable de sessió<br>
Formulari d'entrada</h2><br>

<form name="form1" method="post" action="rebuda.php">
<table width="200" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>Codi professor/a: </td>
<td><input name="codi" type="text" id="codi5" size="6"></td>
</tr>
<tr>
<td>Curs acad&egrave;mic: </td>
<td><input name="any" type="text" id="any4" size="4"></td>
</tr>
<tr>
<td>Pla:</td>
<td><input name="etapa" type="text" id="etapa4" size="4"></td>
</tr>
<tr>
<td width="110">Curs: </td>
<td> <input name="nivell" type="text" id="nivell3" size="1"> </tr>
<tr>
<td>Grup:</td>
<td><input name="grup" type="text" id="grup3" size="1"></td>
</tr>
</table>
<br>
<input type="submit" name="Submit" value="Enviar">
</form>

</body>
</html>

  Llistat 3.4.1. Codi de 'entra.html'
   
  Copieu també el codi que teniu a continuació, que es correspon amb el tractament de les dades passades pel formulari, i deseu-lo amb el nom de rebuda.php.
   
Veure codi

<?php
/*---------------------------------------------------------------
* Mòdul: 3 Pràctica: 4 Fitxer: rebuda.php
* Autor: D116 Data:
* Descripció: Pas de variables de sessió
* Pre condi.: Dades entrades a 'entra.html'
* Post cond.:
----------------------------------------------------------------*/

// Cada script que vulguem treballar amb la sessió activa
// ha d'incloure la funció session_start() al capdamunt
session_start();

echo "<body bgcolor=\"#FFFF99\">";

// Recollim els valors transmesos pel formulari de l'array _POST
$codi = $_POST['codi'];
$any = $_POST['any'];
$etapa = $_POST['etapa'];
$nivell = $_POST['nivell'];
$grup = $_POST['grup'];

// Posem un títol
echo "<h2>Passant valors de variables de sessió<br>\n";
echo "Fitxer actual: ".$_SERVER['PHP_SELF']."</h2><br>\n";

// Mostrem les dades recollides: codi, any, etapa, nivell i grup
echo "<table>";
echo "<tr><td> <b>Var. sessió codi:</b> </td><td>".$codi."</td></tr>\n";
echo "<tr><td> <b>Var. sessió any:</b> </td><td>".$any."</td></tr>\n";
echo "<tr><td> <b>Var. sessió pla:</b> </td><td>".$etapa."</td></tr>\n";
echo "<tr><td> <b>Var. sessió curs:</b> </td><td>".$nivell."</td></tr>\n";
echo "<tr><td> <b>Var. sessió grup:</b> </td><td>".$grup."</td></tr>\n";
echo "</table>";

// Assignem els valors trobats a les variables de sessió, que es passaran
$_SESSION['any'] = $any;
$_SESSION['codi'] = $codi;
$_SESSION['etapa'] = $etapa;
$_SESSION['nivell'] = $nivell;
$_SESSION['grup'] = $grup;
echo "</table>\n";

// Establim link a pàgina següent. Li passem el nom de sessió
// i el seu identificador
echo "<br><br><a href=\"passant.php?".session_name()."=".session_id();
echo "\">Segueix</a>";
?>

  Llistat 3.4.2. Codi de 'rebuda.php'
   
  A continuació, teniu els codis dels fitxers passant.php, passant2.php i passant3.php. Copieu-los també i deseu-los en diferents fitxers amb aquests mateixos noms.
   
Veure codi

<?php
/*---------------------------------------------------------------
* Mòdul: 3 Pràctica: 4 Fitxer: passant.php
* Autor: D116 Data:
* Descripció: Pas de variables de sessió
* Pre condi.: Dades a 'entra.html' i recollides a 'processa.php'
* Post cond.:
----------------------------------------------------------------*/

// Connectem amb la sessió
session_start();

echo "<body bgcolor=\"#99CCCC\">";

echo "<h2>Passant valors de variable de sessió<br>";
echo "Fitxer actual: ".$_SERVER['PHP_SELF']."</h2><br>\n";

// Si la primera variable de sessió està definida...
if (isset($_SESSION['codi'])){
// Mostrem els valors de sessió que han arribat
echo "<table>";
echo "<tr><td> <b>Var. sessió codi:</b> </td><td>".$_SESSION['codi']."</td></tr>\n";
echo "<tr><td> <b>Var. sessió any:</b> </td><td>".$_SESSION['any']."</td></tr>\n";
echo "<tr><td> <b>Var. sessió pla:</b> </td><td>".$_SESSION['etapa']."</td></tr>\n";
echo "<tr><td> <b>Var. sessió curs:</b> </td><td>".$_SESSION['nivell']."</td></tr>\n";
echo "<tr><td> <b>Var. sessió grup:</b> </td><td>".$_SESSION['grup']."</td></tr>\n";
echo "</table>";
}else{
// Si la primera variable de sessió no està definida...
// mostrem missatge
echo "Variables de sessió no definides \n";
}

echo "<br><br><a href=\"passant2.php?".session_name()."=".session_id();
echo "\">Segueix</a>";
echo "</body>";
?>

  Llistat 3.4.3. Codi de 'passant.php'
   
Veure codi

<?php
/*---------------------------------------------------------------
* Mòdul: 3 Pràctica: 4 Fitxer: passant2.php
* Autor: D116 Data:
* Descripció: Pas de variables de sessió
* Pre condi.: Dades a 'entra.html' i recollides a 'processa.php'
* Post cond.:
----------------------------------------------------------------*/

// Connectem amb la sessió
session_start();

echo "<body bgcolor=\"#FFCC66\">";

echo "<h2>Passant valors de variable de sessió<br>";
echo "Fitxer actual: ".$_SERVER['PHP_SELF']."</h2><br>\n";

// Si la primera variable de sessió està definida...
if (isset($_SESSION['codi'])){
// Mostrem els valors de sessió que han arribat
echo "<table>";
echo "<tr><td> <b>Var. sessió codi:</b> </td><td>".$_SESSION['codi']."</td></tr>\n";
echo "<tr><td> <b>Var. sessió any:</b> </td><td>".$_SESSION['any']."</td></tr>\n";
echo "<tr><td> <b>Var. sessió pla:</b> </td><td>".$_SESSION['etapa']."</td></tr>\n";
echo "<tr><td> <b>Var. sessió curs:</b> </td><td>".$_SESSION['nivell']."</td></tr>\n";
echo "<tr><td> <b>Var. sessió grup:</b> </td><td>".$_SESSION['grup']."</td></tr>\n";
echo "</table>";
}else{
// Si la primera variable de sessió no està definida...
// mostrem missatge
echo "Variables de sessió no definides \n";
}

echo "<br><br>Abans de seguir, la primera vegada aneu enrere amb el navegador per veure si es conserven els";
echo " valors de les variables de sessió tornat a la pàgina anterior";
echo "<br><br><a href=\"passant3.php?".session_name()."=".session_id();
echo "\">Segueix</a>";;
?>
</body>

  Llistat 3.4.4. Codi de 'passant2.php'
   
Veure codi

<?php
/*---------------------------------------------------------------
* Mòdul: 3 Pràctica: 4 Fitxer: passant3php
* Autor: D116 Data:
* Descripció: Pas de variables de sessió
* Pre condi.: Dades a 'entra.html' i recollides a 'processa.php'
* Post cond.:
----------------------------------------------------------------*/

// Connectem amb la sessió
session_start();

echo "<body bgcolor=\"#CCCCCC\">";

echo "<h2>Passant valors de variable de sessió<br>";
echo "Fitxer actual: ".$_SERVER['PHP_SELF']."</h2><br>\n";

// Si la primera variable de sessió està definida...
if (isset($_SESSION['codi'])){
// Mostrem els valors de sessió que han arribat
echo "<table>";
echo "<tr><td> <b>Var. sessió codi:</b> </td><td>".$_SESSION['codi']."</td></tr>\n";
echo "<tr><td> <b>Var. sessió any:</b> </td><td>".$_SESSION['any']."</td></tr>\n";
echo "<tr><td> <b>Var. sessió pla:</b> </td><td>".$_SESSION['etapa']."</td></tr>\n";
echo "<tr><td> <b>Var. sessió curs:</b> </td><td>".$_SESSION['nivell']."</td></tr>\n";
echo "<tr><td> <b>Var. sessió grup:</b> </td><td>".$_SESSION['grup']."</td></tr>\n";
echo "</table>";
}else{
// Si la primera variable de sessió no està definida...
// mostrem missatge
echo "Variables de sessió no definides \n";
}

// Buidem el contingut de les variables de sessió
session_unset();

echo "<br><br>Un cop vistos els valors de les variables, actualitzeu la pàgina i veureu";
echo " l'efecte de la funció \"session_unset\"";
?>
</body>

  Llistat 3.4.5. Codi de 'passant3.php'
   
 

Un cop tingueu desats tots aquests fitxers, podeu comprovar el funcionament de la sessió:

  • Crideu la pàgina entra.html des del navegador i ompliu les caselles amb els valors que vulgueu

Figura 3.4.1

   
 
  • Arribareu, llavors, a la pàgina següent, en què, es mostren les dades entrades en el formulari anterior.
    Podeu clicar sobre Segueix per comprovar si els valors mostrats són passats a l'script següent.

Figura 3.4.2

   
 
  • Aleshores apareix la pantalla del nou script en què, efectivament, es mantenen els valors passats en la sessió.
    Cliquem de nou a Segueix per passar els valors a un nou script.

Figura 3.4.3

   
 
  • Aquí continuem tenint disponibles els mateixos valors. A la pàgina es recomana retrocedir amb el navegador per veure si encara es mantenen les dades a la pantalla anterior.
    Després de fer aquesta comprovació, torneu a clicar sobre Segueix per arribar a la darrera pantalla.

Figura 3.4.4

   
 
  • En aquest punt, veiem que es continuen mantenint els valors, però després de mostrar-los, n'esborrem el contingut amb session_unset(), de manera que si actualitzem la pàgina o retrocedim, ja no apareixen.

Figura 3.4.5

   
   
Amunt
Pràctica
1
2
3
4
   
Exercicis
Exercicis