Volver al índice Sesiones

En esta lección se trata el manejo de sesiones en PHP:


Introducción

Las sesiones son un mecanismo que utilizan los servidores web para guardar información sobre el usuario y su actividad y recuperarla cada vez que el navegador les pide una página.

Esta información esta disponible como mucho hasta que el usuario cierre el navegador.

La diferencia con respecto a las cookies es que mediante cookies la información se guarda en el ordenador del usuario y se envía en cada petición al servidor, mientras que mediante sesiones la información se guarda en el servidor. En el manual de PHP se ofrece un capítulo dedicado a las sesiones.

El trabajo con sesiones tiene tres partes:


Crear la sesión

En PHP, las sesiones se crean mediante la función session_start(). Si la sesión no existía, esta función crea la sesión y le asocia un identificador de sesión único. Si la sesión ya existía, esta función permite que la página tenga acceso a la información vinculada a la sesión.

Por ejemplo:

<?php
session_start();
?>

Como en el caso de las cookies, hay que tener la precaución de utilizar la función session_start() antes de empezar a escribir el contenido de la página, porque si no PHP producirá un aviso y no se creará la sesión. El motivo es que el idetificador de sesión se utiliza en las cabeceras de respuesta HTTP y las cabeceras se envían antes del texto de la página. Es decir, cuando PHP encuentra una instrucción que escribe texto, cierra automáticamente la cabecera; si a continuación PHP encuentra en el programa la función session_start(), da un aviso porque ya se han enviado las cabeceras y no se crea la sesión.

El ejemplo siguiente muestra código incorrecto, ya que utiliza la función setcookie() después de haber escrito texto, y el mensaje de aviso generado por PHP.

<?php
// Este código es incorrecto, la cabecera se crea después de crear texto
print "<p>Hola</p>";
session_start();
?>
<p>Hola</p>

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at prueba.php:3) in prueba.php on line 5

Nota: En algunos casos este código incorrecto puede no generar un aviso y la cookie puede crearse, dependiendo de la configuración de la directiva output_buffering.

Volver al principio de la página


Utilizar la sesión

Cuando una página ha creado una sesión o ha accedido a una sesión ya existente mediante session_start(), la página tiene acceso a la matriz $_SESSION que contiene las variables de esa sesión.

La matriz $_SESSION es una matriz asociativa en la que se pueden definir valores como en cualquier otra matriz. La diferencia es que $_SESSION es accesible desde páginas diferentes (siempre que esas páginas tengan asociada la misma sesión), manteniéndose los valores de una página a otra.

El ejemplo siguiente muestra dos páginas. La primera página guarda información en $_SESSION y la segunda la utiliza.

<?php
session_start();
$_SESSION["nombre"] = "Pepito Conejo";
print "<p>Se ha guardado su nombre.</p>";
?>
<p>Se ha guardado su nombre.</p>
<?php
session_start();
print "<p>Su nombre es $_SESSION[nombre].</p>";
?>
<p>Su nombre es Pepito Conejo.</p>


Los valores de $_SESSION se borran como en cualquier otra matriz mediante la función unset().

<?php
session_start();

if (isset($_SESSION["nombre"])) {
    print "<p>Su nombre es $_SESSION[nombre].</p>";
} else {
    print "<p>No sé su nombre.</p>";
}

unset($_SESSION["nombre"]);

if (isset($_SESSION["nombre"])) {
    print "<p>Su nombre es $_SESSION[nombre].</p>";
} else {
    print "<p>No sé su nombre.</p>";
}

?>
<p>Su nombre es Pepito Conejo.</p>

<p>No sé su nombre.</p>


Un detalle importante que distingue a las sesiones de las cookies es que:

Es decir, que el siguiente programa siempre producirá el mismo resultado:

<?php
session_start();
$_SESSION["nombre"] = "Pepito Conejo";

if (isset($_SESSION["nombre"])) {
    print "<p>Su nombre es $_SESSION[nombre].</p>";
} else {
    print "<p>No sé su nombre.</p>";
}

unset($_SESSION["nombre"]);

if (isset($_SESSION["nombre"])) {
    print "<p>Su nombre es $_SESSION[nombre].</p>";
} else {
    print "<p>No sé su nombre.</p>";
}

?>
<p>Su nombre es Pepito Conejo.</p>

<p>No sé su nombre.</p>

Volver al principio de la página


Destruir la sesión

El usuario puede destruir la sesión cerrando el navegador, pero las sesiones también se pueden destruir por programa mediante la función session_destroy().

Cuando se destruye una sesión, el programa que ha destruido la sesión sigue teniendo acceso a los valores de $_SESSION creados antes de la destrucción de la sesión, pero las páginas siguientes no. Si se ejecuta el primero de los ejemplos siguientes y después el segundo, se obtienen los resultados indicados:

<?php
session_start();
$_SESSION["nombre"] = "Pepito Conejo";
session_destroy();

if (isset($_SESSION["nombre"])) {
    print "<p>Su nombre es $_SESSION[nombre].</p>";
} else {
    print "<p>No sé su nombre.</p>";
}
?>
<p>Su nombre es Pepito Conejo.</p>
<?php
session_start();

if (isset($_SESSION["nombre"])) {
    print "<p>Su nombre es $_SESSION[nombre].</p>";
} else {
    print "<p>No sé su nombre.</p>";
}
?>
<p>No sé su nombre.</p>

Volver al principio de la página

Esta página forma parte del curso "Páginas web con PHP" disponible en http://www.mclibre.org
Autor: Bartolomé Sintes Marco
Última modificación de esta página: 25 de mayo de 2011

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.