Diferencia entre revisiones de «Plantilla:PHP/Cookies»

De WikiEducator
Saltar a: navegación, buscar
(Página creada con « ===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...»)
 
Línea 1: Línea 1:
 
+
<div class=parrafo>
 
===Qué es una Cookie===
 
===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.
+
Una cookie es una pequeña cantidad de datos almacenada por el navegador del usuario cuando solicita una página a un servidor. Básicamente consiste va a ser cantidad de información que almacena preferencias de un usuario.
*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.
+
En parte se podría pensar que con esta técnica  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.
+
Una '''''Cookie'''' es un fichero que se '''''almacena 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
+
{{Tip|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.
+
{{MRM_Recursos de la Web|Title=Legislación sobre las '''''cookies'''''|
*El servidor es quien solicita la creación del coockie en el cliente
+
*Es muy importante respetar sobre la legislación en el uso de cookies
*El cliente crea  un fichero con dicha información
+
*Básicamente  consiste en que hay que avisar al cliente de que se están utilizando
*Una vez creada, solo puede ser leída por el sitio web que la creó.
+
*En cualquier caso conviene estar al día.
*Para trabajar con cookies tenemos que hacer dos cosas
+
http://www.agpd.es/portalwebAGPD/canaldocumentacion/publicaciones/common/Guias/Guia_Cookies.pdf
*El tamaño máximo de un cookie está limitado a 4K.
+
}}
 +
*En general no se debe de abusar de ellas; hay que tener en cuenta que en muchos las pueden tener deshabilitadas y esto puede impedir que nuestra aplicación web se ejecute de forma eficiente o incluso correcta. Por ello no debería de ocurrir que una aplicación web dependiera de los valores de cookies para funcionar de forma correcta
 +
{{MRM_Puntos clave|Title=Puntos a tener claros|
 +
;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
 
#Almacenar o crear la cookie
 
#Almacenar o crear la cookie
 
#Poder leerla en un momento determinado
 
#Poder leerla en un momento determinado
 +
*El tamaño máximo de un cookie está limitado a 4K.
 +
}}
 
====Crear una coockie====
 
====Crear una coockie====
 
*Para ello usaremos la función '''''setCookie(...)'''''
 
*Para ello usaremos la función '''''setCookie(...)'''''
Línea 37: Línea 45:
 
====Borrar una cookie====
 
====Borrar una cookie====
 
*Para borrar la cookie usamos la función setcookie con un tiempo negativo
 
*Para borrar la cookie usamos la función setcookie con un tiempo negativo
 +
{{Tip|Tener en cuenta que el tiempo es respecto al segundo o UNIX}}
 
<source lang="php">
 
<source lang="php">
 
<?php
 
<?php
Línea 43: Línea 52:
 
?>
 
?>
 
</source>
 
</source>
{{Actividad|
+
{{MRM_Actividad|Title= Información sobre visitas|
*En una página llamada registro.php , almacena en una cookie el último instante en la que se  visitó la página.
+
[[Usuario:ManuelRomero/ProgramacionWeb/php/Aut_Ses_Coo/ejercicios&action=edit#Almacenar el momento de las visitas a una página| Cookies con información de visitas]]
*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 solución==
+
*Tomado el ejemplo anterior (de autentificación), habría que añadir el siguiente código
+
  
<source lang=php>
 
  
if($resultado->num_rows == 0) {
+
{{MRM_Resumen|
//......
+
 
+
 
+
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."
+
 
+
 
+
 
+
 
+
 
+
</source>
+
-->
+
}}
+
{{Resumen|
+
 
==Creación de coockies==
 
==Creación de coockies==
 
<source lang="php">
 
<source lang="php">
Línea 113: Línea 91:
 
</source>
 
</source>
 
}}
 
}}
 
{{Actividades|
 
*Crea una pagina que simule ser la de un periódico. La misma debe permitir configurar que tipo de titular deseamos que aparezca al visitarla, pudiendo ser:
 
#Noticia política.
 
#Noticia económica.
 
#Noticia deportiva.
 
*Mediante tres objetos de tipo radio, permitir seleccionar que titular debe mostrar el periódico.
 
*Almacenar en una cookie el tipo de titutar que desea ver el cliente.
 
*La primera vez que visita el sitio deben aparecer los tres titulares.
 
}}
 
{{Actividad|
 
*Realiza el ejercicio de la siguiente referencia
 
*http://www.mclibre.org/consultar/php/ejercicios/cookies/cookies.html}}
 
}}
 
{{Lectura|Title=Referencias en la web|
 
*http://docs.php.net/manual/es/features.cookies.php
 
*http://docs.php.net/manual/es/function.setcookie.php
 
*http://www.w3schools.com/php/php_cookies.asp
 
*http://www.mclibre.org/consultar/php/lecciones/php_cookies.html
 
Normativa: Directiva 2009/136/CE}}
 
  
 
===Coockies con array===
 
===Coockies con array===
Línea 169: Línea 127:
 
</source>
 
</source>
  
{{Actividad|
 
*Añade en la base de datos usuarios varios usuarios diferentes
 
*Crea un formulario para que el usuario sepuede registrar
 
<source lang=html5>
 
<div id="login">
 
            <fieldset >
 
                <legend>Login</legend>
 
                <form action="." method="POST">
 
                    <label for='nombre' >Nombre:</label>
 
                    <input type="text" name ="nombre">
 
                    <label for='pass'>Password: </label>
 
                    <input type="text" name ="pass">
 
                    <input type="submit" value="Cambiar Usuario" name="registrar"/>
 
                </form>
 
            </fieldset>
 
        </div>
 
</source>
 
*Visualiza los accesos del usuario acutual así como los accesos del resto de usuarios
 
*Aquí podemos ver el ejemplo
 
http://www.manuel.infenlaces.com/cookies/
 
*Para el formulario este sencillo css
 
<source lang=css>
 
#login fieldset {
 
  width: 230px;
 
  padding:10px;
 
  border:1px solid #ccc;
 
  background-color: #eee;
 
}
 
  
#login legend {
+
{{Lectura|Title=Administrar cookies en diferentes navegadores|
  font-family : Arial, sans-serif;
+
  font-size: 1.3em;
+
  font-weight:bold;
+
  color:#333;
+
}
+
</source>
+
<!--
+
===Posible solución del ejercicio===
+
<source lang=php>
+
<?php
+
// Si el usuario aún no se ha autentificado, pedimos las credenciales
+
//Si me he registrado verifico los datos
+
require_once "baseDatos.php";
+
    $usuario = $_POST['nombre'];
+
    $pass = $_POST['pass'];
+
    $conexion = conectar();
+
    if ($conexion != null) { //Se ha conectado ok a la bd
+
        date_default_timezone_set('Europe/Madrid');
+
        // Ejecutamos la consulta para comprobar si existe
+
        // esa combinación de usuario y contraseña
+
        $sql = <<<SQL
+
                SELECT usuario FROM usuarios
+
                where usuario = ?
+
                and
+
                contrasena =?
+
SQL;
+
 
+
        $stmt = $conexion->stmt_init();
+
        $stmt->prepare($sql);
+
 
+
        $stmt->bind_param("ss", $usuario, md5($pass));
+
        $stmt->execute();
+
        $stmt->store_result();
+
        //$stmt->bind_result($u);
+
// Si no existe, se vuelven a pedir las credenciales
+
        $indice = 0;
+
        if ($stmt->num_rows == 0) {
+
            $error = "Usuario no reconocido";
+
        } else {
+
            if (isset($_COOKIE[$usuario])) {
+
                //Leemos la cookie y obtenemos el índice
+
                $acceso = $_COOKIE[$usuario];
+
                $indice = count($acceso);
+
            }
+
            //Añadimos el nuevo acceso en la cookie correspondiente
+
            setcookie($usuario . "[" . ($indice) . "]", time(), time() + 3600);
+
        }
+
        $stmt->free_result();
+
        $conexion->close();
+
 
+
}
+
?>
+
<!DOCTYPE html>
+
<html>
+
    <head>
+
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+
        <title>Ejemplo Cookies en autentificación </title>
+
        <link href="cookie.css" rel="stylesheet" type="text/css">
+
    </head>
+
    <body>
+
        <div id="login">
+
            <fieldset >
+
                <legend>Login</legend>
+
                <form action="." method="POST">
+
                    <label for='nombre' >Nombre:</label>
+
                    <input type="text" name ="nombre">
+
                    <label for='pass'>Password: </label>
+
                    <input type="text" name ="pass">
+
                    <input type="submit" value="Cambiar Usuario" name="registrar"/>
+
                </form>
+
            </fieldset>
+
        </div>
+
 
+
        <?php
+
        if ($error == null) {
+
            echo"<h2>Lista de accesos del usuario conectado actualmente $usuario</h2><hr/>";
+
            if (isset($acceso)) {
+
                for ($i = 0; $i < $indice; $i++)
+
                    echo "-Acceso número $i a las  " . date("d/m/y \a \l\a\s H:i", $acceso[$i]) . "<br/>";
+
            } else
+
                echo "Bienvenido. Esta es su primera visita. $nombre<br/>";
+
            //ahora recorro todos los usuarios";
+
            foreach ($_COOKIE as $user => $accesos) {
+
                if ($user != $usuario) {
+
                    echo "<h2> Usuario $user </h2><br/><hr/>";
+
                    foreach ($accesos as $numAcceso => $hora) {
+
                        echo "Acceso número $numAcceso a las " . date("d/m/y \a \l\a\s H:i", $hora) . "<br/>";
+
                    }
+
                }
+
            }
+
        } else
+
            echo "Se ha producido el error $error.<br />";
+
        ?>
+
    </body>
+
</html>
+
</source>
+
*Bases de datos donde habrá que actualizar las credenciales
+
<source lang =php>
+
<?php
+
 
+
/*
+
* To change this license header, choose License Headers in Project Properties.
+
* To change this template file, choose Tools | Templates
+
* and open the template in the editor.
+
*/
+
 
+
function conectar(){
+
      $usuarioBD ="manuel_manuel";
+
      $pass ="xv2e6w";
+
      $host = "localhost";
+
      $bd = "manuel_dwes";
+
      $conexion = new mysqli($host,$usuarioBD,$pass,$bd);
+
      //Hacemos una consulta a ver si el usuario existe
+
      if ($conexion->connect_errno){
+
          echo ("Se ha producido un error conectado a la base de datos ".$conexion->connect_error);
+
          return null;
+
      }
+
      return $conexion;
+
}
+
?>
+
</source>
+
-->
+
}}
+
 
+
 
+
 
+
 
+
 
+
{{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
Línea 333: Línea 134:
 
*'''''Opera''''': http://help.opera.com/Windows/11.50/es-ES/cookies.html
 
*'''''Opera''''': http://help.opera.com/Windows/11.50/es-ES/cookies.html
 
*'''''Safari''''': http://support.apple.com/kb/ph5042
 
*'''''Safari''''': http://support.apple.com/kb/ph5042
 +
}}
 +
</div>

Revisión de 01:23 23 dic 2016

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. Básicamente consiste va a ser cantidad de información que almacena preferencias de un usuario. En parte se podría pensar que con esta técnica 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 almacena en el cliente y guarda información de ese cliente en referencia a una determinada sitio web.

Icon present.gif
Tip: Como se guardan en el cliente, se necesita confirmación expresa del cliente para dejar que se almacenen cosas en su equipo



Icon inter.gif
Legislación sobre las cookies
  • Es muy importante respetar sobre la legislación en el uso de cookies
  • Básicamente consiste en que hay que avisar al cliente de que se están utilizando
  • En cualquier caso conviene estar al día.

http://www.agpd.es/portalwebAGPD/canaldocumentacion/publicaciones/common/Guias/Guia_Cookies.pdf


  • En general no se debe de abusar de ellas; hay que tener en cuenta que en muchos las pueden tener deshabilitadas y esto puede impedir que nuestra aplicación web se ejecute de forma eficiente o incluso correcta. Por ello no debería de ocurrir que una aplicación web dependiera de los valores de cookies para funcionar de forma correcta


Icon key points.gif

Puntos a tener claros

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
  1. Almacenar o crear la cookie
  2. Poder leerla en un momento determinado
  • El tamaño máximo de un cookie está limitado a 4K.


Crear una coockie

  • Para ello usaremos la funció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
Icon present.gif
Tip: Tener en cuenta que el tiempo es respecto al segundo o UNIX


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


Icon activity.jpg
Información sobre visitas

Cookies con información de visitas





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);
?>


Coockies con array

  • En este caso la cookie en lugar de contener un solo valor va a contener un array
  • A la hora de leer la cookie se hace igual que hasta ahora
  • Supongamos que tenemos varias cookies, dependiendo del usuario que se ha conectado
  • De cada uno de esos usuarios tendríamos los accesos que ha realizado en un array indexado indicando la hora
  • Leemos la cookie
<?php
....
$usuario = $_POST['usuario']
......
//Leemos la cookie que es un array de accesos
$arrayAccesos = $_COOKIE[$usuario];
.....
  • Guardar la cookie
  • Esto crea el plateamiento de como guardar la cookie a la hora de qué nombre va a tener esta cookie
  • Es como que en la misma cookie queremos guardar muchos valores, pero en realidad guardamos uno solo que es el array
  • Una manera de hacerlo es incorporar a la cookie ya guardada el nuevo índice
  • Para ello una manera de hacerlo es obtener el valor del indice del nuevo elemento obteniendo el tamaño del vector hasta ahora
  • Incorporamos en la posición correspondiente el nuevo valor
....
$usuario = $_POST['usuario']
......
//Leemos la cookie que es un array de accesos
$arrayAccesos = $_COOKIE[$usuario];
.....
//Ahora ya puedo obtener el tamaño del vector
$indice = count($arrayAccesos);
//Con este valor añado la nueva entrada
setCookie($usuario.'['.$indice.']',time(),time()+3600
.....



Icon reading.jpg

Administrar cookies en diferentes navegadores

{{{1}}}