Diferencia entre revisiones de «Usuario:ManuelRomero/php/cookies»

De WikiEducator
Saltar a: navegación, buscar
Línea 141: Línea 141:
 
*http://www.mclibre.org/consultar/php/lecciones/php_cookies.html
 
*http://www.mclibre.org/consultar/php/lecciones/php_cookies.html
 
Normativa: Directiva 2009/136/CE}}
 
Normativa: Directiva 2009/136/CE}}
 +
===Coockies con array===
 +
*En este caso la cookie en lugar de contener un solo valor va a contener un array asociativo
 +
*A la hora de leer la cookie se hace igual que hasta ahora
 +
<source lang=php>
 +
</php>
  
  
  
{{Lectura|Title=Administrar cookies en diferentes navegadores
+
{{Lectura|Title=Administrar cookies en diferentes navegadores|
 
*'''''Firefox''''' http://support.mozilla.org/es/kb/Borrar%20cookies?esab=a&s=cookies&r=2&as=s
 
*'''''Firefox''''' http://support.mozilla.org/es/kb/Borrar%20cookies?esab=a&s=cookies&r=2&as=s
 
*'''''Chrome/Chromium''''': http://support.google.com/chrome/bin/answer.py?hl=es&answer=95647
 
*'''''Chrome/Chromium''''': http://support.google.com/chrome/bin/answer.py?hl=es&answer=95647

Revisión de 17:24 21 nov 2014



DWES TituloTema5.png

Qué es una Cookie

  • Una cookie es una pequeña cantidad de datos almacenada por el navegador del usuario cuando solicita una página a un servidor.
  • Con esto podemos suplir la característica de que http es un protocolo sin estado (Insistir en que esto es una característica del protocolo, no una limitación.
  • Una Cookie es un fichero que se almacene en el cliente y guarda información de ese cliente en referencia a una determinada sitio web.
  • Como se guardan en el cliente, se necesita confirmación expresa del cliente para dejar que se almacenen cosas en su equipo
  • En general no se debe de abusar de ellas, máxime cuando muchos las pueden tener deshabilitadas y esto puede impedir que nuestra aplicación web se ejecute de forma eficiente o incluso correcta.
  • El servidor es quien solicita la creación del coockie en el cliente
  • El cliente crea un fichero con dicha información
  • Una vez creada, solo puede ser leída por el sitio web que la creó.
  • Para trabajar con cookies tenemos que hacer dos cosas
  • El tamaño máximo de un cookie está limitado a 4K.
  1. Alamacenar o crear la cookie
  2. Poder leerla en un momento determinado

Crear una coockie

  • Para ello usaremos la fucnión setCookie(...)
  • En esta función puede recibir hasta 7 parámetros, (sólo el primero es obligatorio).
http://es.php.net/manual/es/function.setcookie.php
  • Es habitual usar los tres primeros que serían
  1. Nombre de la cookie
  2. Valor que almacenamos en ella
  3. Tiempo de expiración: es un entero en segundos. Si no se especifica, la cookie termiará junto a esta sesión.
  • Por ejemplo si quieremos almacenar el usuario y que tenga un tiempo de duración de 1 hora
   setcookie("usuario", $_SERVER['PHP_AUTH_USER'], time()+3600);
  • Importante el envío de cookies al cliente ha de hacerse antes de que se escriba nada en html, igual que las funciones header.

Recuperar la cookie

  • El proceso de recuperación de la información que almacena una cookie es muy simple.
  • Cuando accedes a un sitio web, el navegador (cliente), le envía de forma automática todo el contenido de las cookies que almacene relativas a ese sitio en concreto (servidor).
  • Desde PHP se puede acceder a esta información por medio del array $_COOKIE.
  • Para recuperar los datos anteriores
$usuario = $_COOKIE['usuario'];

Borrar una cookie

  • Para borrar la cookie usamos la función setcookie con un tiempo negativo
<?php
// Ponemos un tiempo de expiración negativo
setcookie("user", "", time()-3600);
?>


Icon activity.jpg

Actividad

  • En la página registro.php anterior, almacena en una cookie el último instante en que el cualquier usuario visitó la página.
  • Si es su primera visita, muestra un mensaje de bienvenida.
  • En caso contrario, muestra la fecha y hora de su anterior visita.
  • Deberás utilizar la función setcookie para guardar el instante de su anterior visita y mostrar su contenido utilizando el array $_COOKIE.

Posible solucion

  • Tomado el ejemplo anterior (de autentificación), habría que añadir el siguiente código
if($resultado->num_rows == 0) {
 //......
 
 
else {
     if (isset($_COOKIE['ultimo_login'])) {
         $ultimo_login = $_COOKIE['ultimo_login'];
     }
     setcookie("ultimo_login", time(), time()+3600);
}
 
//..... y una vez dentro de la página
 
if (isset($ultimo_login))
    echo "Ultimo login: " . date("d/m/y \a \l\a\s H:i", $ultimo_login);
else
    echo "Bienvenido. Esta es su primera visita."






Icon summary.gif

Resumen

Creación de coockies

<?php
$expire = time()*60*60*24*30 //La coockie durará un  mes
setcookie("user", "Alex Porter", $expire);
?>
  • Si tiempo de expiración es 0, la coockie que solo dura la sesion
<?php
$expire = =; //La coockie durará lo que dure la sesión
setcookie("user", "Alex Porter", $expire);
?>

Ver el valor de una cookie

<?php
// Ver una cookie concreta
echo $_COOKIE["user"];
 
// Para ver todas las cookies
print_r($_COOKIE);
?>

Borrado

<?php
// Ponemos un tiempo negativo
setcookie("user", "", time()-3600);
?>



Plantilla:Actividades


Icon activity.jpg

Actividad



}}



Coockies con array

  • En este caso la cookie en lugar de contener un solo valor va a contener un array asociativo
  • A la hora de leer la cookie se hace igual que hasta ahora
</php>
 
 
 
{{Lectura|Title=Administrar cookies en diferentes navegadores|
*'''''Firefox''''' http://support.mozilla.org/es/kb/Borrar%20cookies?esab=a&s=cookies&r=2&as=s
*'''''Chrome/Chromium''''': http://support.google.com/chrome/bin/answer.py?hl=es&answer=95647
*'''''Internet Explorer''''': http://windows.microsoft.com/es-es/windows7/how-to-manage-cookies-in-internet-explorer-9
*'''''Opera''''': http://help.opera.com/Windows/11.50/es-ES/cookies.html
*'''''Safari''''': http://support.apple.com/kb/ph5042
}}
|}
<!--
<!DOCTYPE html>
<?php
// Si el usuario aún no se ha autentificado, pedimos las credenciales
//Observa que escribimos esto antes de escribier ninguna salida
//Esto es importante si se usa la función header
if (!isset($_SERVER['PHP_AUTH_USER'])) {
    header('WWW-Authenticate: Basic realm="Contenido restringido"');
    header("HTTP/1.0 401 Unauthorized");
    exit;
}
// Si ya ha
//enviado las credenciales, las comprobamos con la base de datos
else {
// Conectamos a la base de datos
 
    $conexion = new mysqli("localhost", "root", "root", "dwes");
    $error = $conexion->connect_errno;
// Si se estableció la conexión
    if ($error == null) {
        //Realizamos una consulta preparada
        $consulta = $conexion->stmt_init();
// Ejecutamos la consulta para comprobar si existe
// esa combinación de usuario y contraseñ
        $sql = <<<SQL
SELECT usuario FROM usuarios
 WHERE usuario = ? AND 
       contrasena = ?
SQL;
 
        $usuario = $_SERVER['PHP_AUTH_USER'];
        $pass = md5($_SERVER['PHP_AUTH_PW']);
        $consulta->prepare($sql);
        $consulta->bind_param("ss", $usuario, $pass);
        $consulta->execute();
        $consulta->store_result();
        if ($consulta->num_rows == 0) {
 
            header('WWW-Authenticate: Basic realm="Contenido restringido"');
            header("HTTP/1.0 401 Unauthorized");
            //Esto solo se visualizará si damos a cancelar del formulario de autentificación
            $consulta->close();
            $conexion->close();
            echo "<h1> Usuario y password no autorizado reintentelo </h1>";
            exit;
        }  else { //Situación en la que el usuario se ha conectado ok
            if (isset($_COOKIE["usuario"])){
                $acceso=$_COOKIE["usuario"];
            }
            $acceso[]=time();
            $indice =count($acceso)-1;
            //$indice = count($acceso)-1;
 
            setcookie("usuario[$indice]",time(),time()+12*30*24*3600);
            print_r($_COOKIE);
 
        }
        $consulta->close();
        $conexion->close();
    }//End error =null
}//End else de if !isset .....
?>
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <title>Ejemplo Tema 4: Utilización de MySQL para autentificación HTTP</title>
        <link href="dwes.css" rel="stylesheet" type="text/css">
    </head>
    <body>
        <?php
        echo "Nombre de usuario: " . $_SERVER['PHP_AUTH_USER'] . "<br/>";
        echo "Hash de la contraseña: " . md5($_SERVER['PHP_AUTH_PW']) . "<br/>";
 
        if (count($acceso)!=0){
            echo "<h2>Accesos realizados</h2>";
 
            for ($i=0;$i<=$indice;$i++){
                echo "Acceso número $i ".(date ("d/m/y \a \l\a\s H:i",$acceso[$i]))."<br/>";
            }
 
        }else
            echo "Wellcome to your first access";
 
        ?>
    </body>
</html>
-->