PHP sessions

De Cacauet Wiki
Dreceres ràpides: navegació, cerca


Referències:


Introducció[modifica]

Una sessió de PHP ens permetrà enregistrar variables i reprendre-les més endavant (en posteriors visites o recàrregues de la web).

Donat que HTTP és un protocol stateless o sense estat (també es sol dir protocol REST), cada cop que visitem una pàgina web es crea una nova connexió i a l'acabar el diàleg client-servidor (request-response) es destrueixen les dades. Està pensat per optimitzar els recursos de servidor, però ens complica força el poder mantenir un procés que ocupi diverses visites a la aplicació web.

Per suplir aquest problema s'han inventat les sessions PHP. Utilizen les PHP cookies per aconseguir una variable $_SESSION que sigui persistent.


Exemples[modifica]

Si mires la web de PHP Sessions a W3C Schools veuràs un exemple de l'ús de $_SESSION a través de diferents pàgines PHP.

Variable simple[modifica]

En aquest exemple enregistrem a $_SESSION["usuari"] el nom del nostre usuari. Només el sobreescrivim quan enviem el formulari amb algun nom nou:

<?php
	// session_start va SEMPRE abans d'escriure res al document HTML
	session_start();
?>
<html><!-- ara ja podem escriure el què vulguem -->
<body>
<?php
	// pesquem el valor del formulari i l'introduim a la variable de sessió
	// (sempre i quan no estigui buit/"empty")
	if( isset($_POST["nomusuari"]) && !empty($_POST["nomusuari"])) {
		$_SESSION["usuari"] = $_POST["nomusuari"];
	}
	// independentment de l'anterior if, donem la benvinguda al nostre usuari si ja tenim el seu nom
	if( isset($_SESSION["usuari"]) )
		echo "<p>Benvingut/da ".$_SESSION["usuari"]."</p>\n";
?>
<form method="post">
	<input type="text" name="nomusuari" /><br>
	<input type="submit" />
</form>
 
<p>Opcions...</p>
 
</body>

Exemple amb array : la pizza[modifica]

Posem pel cas que volem demanar una pizza i volem anar acumulant ingredients. Ho podriem fer així:

<?php
	// inici de sessió SEMPRE abans d'escriure res al doc HTML
	session_start();
 
	// inicialitzem variable "pizza" dins de la sessió si no estava creada
	if( !isset($_SESSION["pizza"]) ) {
		$_SESSION["pizza"] = array();
	}
?>
<html>
<body>
<?php
	// si ens envien algun ingredient, l'afegim a l'array de la pizza
	if( isset($_POST["ingredient"]) && !empty($_POST["ingredient"]) ) {
		// fiquem l'array "pizza" de la sessió a la variable $pizza
		$pizza = $_SESSION["pizza"];
		// afegim nou ingredient a l'array
		$pizza[] = $_POST["ingredient"];
		// guardem de nou l'array dins de la sessió
		$_SESSION["pizza"] = $pizza;
		// ...o en una sola línia:
		// array_push( $_SESSION["pizza"], $_POST["ingredient"] );
	}
 
	// mostrem els ingredients
	print_r($_SESSION["pizza"]);
?>
 
<form method="post">
	Afegeix ingredient a la teva pizza! : <input type="text" name="ingredient" /><br>
	<input type="submit">
</form>
</body>


Exercicis[modifica]

  1. Afegeix un botó o link de RESET a l'exemple de la pizza que esborri els continguts de l'array.
  2. Batalla naval en PHP