Cookies y sesiones (resumen)

Resumen

Para deshabilitar las cookies en Firefox, hay que desmarcar la casilla de verificación "Aceptar cookies" en el menú Herramientas > Opciones > Privacidad > Usar una configuración personalizada para el historial.

Para deshabilitar las cookies en Internet Explorer 8, hay que elegir la configuración "Bloquear todas las cookies" en el menú Herramientas > Opciones de Internet > Privacidad.


Las cookies permiten que el servidor almacene datos en el ordenador del cliente.

// Las cookies deben crearse o destruirse antes de enviar ningún carácter al navegador.

// Para crear una cookie, se utiliza la función setcookie

setcookie("nombreCookie", valorCookie, momentoDestruccion);

// nombreCookie es el nombre con que identificará a la cookie.
//    Los nombres de cookie no deben coincidir con los nombres de los controles de los formularios
// valorCookie es el valor que se guarda en la cookie
// momentoDestruccion es el momento en que se borrará automáticamente la cookie,
//    expresado como tiempo Unix. Para calcularlo se suele utilizar la expresion
//    time()+$duracion donde $duracion es el número de segudos que debe
//    permancer la cookie en el ordenador del cliente
//    Si se omite, la cookie se borrará al cerrar el navegador

// Los valores de las cookies se pueden consultar en cualquier página
// del mismo dominio y se almacenan en la matriz $_COOKIE y en $_REQUEST
// (por eso no deben coincidir los nombres de las cookies con los de los controles de los formularios)

$dato = $_COOKIE["nombreCookie"];
$dato = $_REQUEST["nombreCookie"];

// Para borrar una cookie, basta con volver a crear la cookie con un tiempo anterior al actual

setcookie(nombreCookie, valorCookie, time() - 3600);

Las sesiones permiten que PHP "recuerde" datos cuando el usuario cambia de página dentro de un mismo sitio web, sin necesidad de ir pasándola de página a página como controles ocultos.

// Para utilizar variables de sesión, cada página debe abrir la sesión:

ini_set("session.save_handler", "files"); // Sólo si session.save_handler = user en php.ini
session_start();


// Una vez abierta la sesión, se pueden almacenar valores en la matriz $_SESSION:

$_SESSION["dato"] = $dato;


// Los valores almacenados se pueden recuperar en cualquier página
// en la que se haya abierto sesión desde el mismo navegador:

$dato = $_SESSION["dato"];


// Las sesiones se pierden si el usuario cierra el navegador o si se
// destruye la sesión desde el servidor:

session_destroy();

Ejemplos

Contador del número de accesos a una página

<?php
//contador del número de accesos a una página por sesión.
session_start();
if (!isset($_SESSION["count"])) {
    $_SESSION["count"] = 0;
} else {
    $_SESSION["count"]++;
}
?>
<html>
<head>
  <title>Contador de accesos</title>
</head>
<body>
<p>
<?php
print("Hola, has accedido a esta página ");
print($_SESSION["count"]);
print(" veces.");
?>
</p>
</body>
</html>
<html>
<head>
  <title>Contador de accesos</title>
</head>
<body>
<p>Hola, has accedido a esta página 2 veces.</p>
</body>
</html>

Configuración personalizada de los colores de una página

<?php
session_start();

if (!isset($_SESSION["bgcol"])) {
    $_SESSION["bgcol"] = 0;
}

if (!isset($_SESSION["textCol"])) {
    $_SESSION["textCol"] = 0;
}

if(isset($_REQUEST["enviar"])) {
    $bgCol = traduce($_REQUEST["nbgCol"]);
    $textCol = traduce($_REQUEST["ntextCol"]);
    $_SESSION["bgCol"] = $bgCol;
    $_SESSION["textCol"] = $textCol;
    print "<html>\n<head>\n<title>Elección de colores</title>\n</head>\n";
    print("<body bgcolor=\"$bgCol\" text=\"$textCol\">");
} else {
    print "<html>\n<head>\n<title>Elección de colores</title>\n</head>\n<body>";
}

function traduce($color)
{
    switch ($color) {
        case "rojo"     : return "red";
        case "verde"    : return "green";
        case "azul"     : return "blue";
        case "cian"     : return "cyan";
        case "amarillo" : return "yellow";
    }
}
?>
<h2>Elige los tus colores favoritos</h2>
<form action="<?php echo($_SERVER["PHP_SELF"]) ?>" method="post">
  <p>Color de fondo:
    <select name="nbgCol">
      <option>rojo</option>
      <option>verde</option>
      <option>azul</option>
      <option>cian</option>
      <option>amarillo</option>
    </select></p>
  <hr />

  <p>Color del texto:
    <select name="ntextCol">
      <option>rojo</option>
      <option>verde</option>
      <option>azul</option>
      <option>cian</option>
      <option>amarillo</option>
    </select></p>
  <p><input type="submit" name="enviar" /></p>
</form>
</body>
</html>