PHP sessions: Diferència entre les revisions

De Cacauet Wiki
Dreceres ràpides: navegació, cerca
(Exemple amb array)
(Exemple amb array : la pizza)
Línia 55: Línia 55:
 
// inici de sessió SEMPRE abans d'escriure res al doc HTML
 
// inici de sessió SEMPRE abans d'escriure res al doc HTML
 
session_start();
 
session_start();
 +
 +
// inicialitzem variable "pizza" dins de la sessió si no estava creada
 +
if( !isset($_SESSION["pizza"]) ) {
 +
$_SESSION["pizza"] = array();
 +
}
 
?>
 
?>
 
 
<html>
 
<html>
 
<body>
 
<body>
 
<?php
 
<?php
// inicialitzem variable de sessió si no ho estava creada
 
if( !isset($_SESSION["pizza"]) ) {
 
$_SESSION["pizza"] = array();
 
}
 
 
 
// si ens envien algun ingredient, l'afegim a l'array de la pizza
 
// si ens envien algun ingredient, l'afegim a l'array de la pizza
 
if( isset($_POST["ingredient"]) && !empty($_POST["ingredient"]) ) {
 
if( isset($_POST["ingredient"]) && !empty($_POST["ingredient"]) ) {
Línia 73: Línia 72:
 
// guardem de nou l'array dins de la sessió
 
// guardem de nou l'array dins de la sessió
 
$_SESSION["pizza"] = $pizza;
 
$_SESSION["pizza"] = $pizza;
// ...o en una sola línia: array_push( $_SESSION["pizza"], $_POST["ingredient"] );
+
// ...o en una sola línia:
 +
// array_push( $_SESSION["pizza"], $_POST["ingredient"] );
 
}
 
}
  

Revisió de 12:19, 25 oct 2016


Referències:


Introducció

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

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

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

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 a la variable $pizza
		$pizza = $_SESSION["pizza"];
		// afegim nou ingredient
		$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">
	Ingredient: <input type="text" name="ingredient" /><br>
	<input type="submit">
</form>
</body>


Exercicis

...