# Cookies y sesiones (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

Ejemplo: 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>
| Hola, has accedido a esta página 2 veces.

Ejemplo: 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>

Esta obra está bajo una licencia de Creative Commons.