Foros del Web » Programando para Internet » PHP »

Duda con respecto a Cookie

Estas en el tema de Duda con respecto a Cookie en el foro de PHP en Foros del Web. Saludos Maestros. Desarrollo un sitio donde descargo una Cookie que tiene el nombre de el momento de ingreso al sitio. La idea es que cuando ...
  #1 (permalink)  
Antiguo 28/07/2003, 16:17
 
Fecha de Ingreso: abril-2003
Mensajes: 80
Antigüedad: 14 años, 7 meses
Puntos: 0
Duda con respecto a Cookie

Saludos Maestros.

Desarrollo un sitio donde descargo una Cookie que tiene el nombre de el momento de ingreso al sitio.

La idea es que cuando nuevamente entre al sitio el sistema pueda identificarlo automáticamente por medio de la cookie que se descargó.

Este es el código que utilizo para darle un nombre al visitante y darle una cookie:

*** código php ***

$fecha = date("YmdHis"); // Observo la fecha
$id = 'U' . $fecha; // Le agrego una U

$valor = algo;
$expiracion = time() + 100000;
setcookie("$id", "$value", "$expiracion"); // Pongo la cookie

**** fin ***

Ahora, si alguien entra al sitio el hoy a las 2:00 p.m. quedaría como: U20030728140223, éste sería su nombre.

La idea es que si él vuelve ha entrar a mi sitio no descargara otra cookie sino algo como: BIENVENIDO: U20030728140223

Pero eso es lo que no sé, necesito su ayuda para saber si se puede hacer y cuales son los comandos necesarios.

Gracias. Espero que puedan ayudarme.
  #2 (permalink)  
Antiguo 28/07/2003, 19:36
 
Fecha de Ingreso: julio-2003
Mensajes: 165
Antigüedad: 14 años, 5 meses
Puntos: 1
Hola,

En realidad la manipulación de cookies no es muy complicada. Es sólo cuestión de trabajar con algunas variables simples. Por ejemplo, en caso de que dispongas de una versión de PHP mayor o igual a 4.1 puedes usar un segmento de código como este para guiarte:

Código:
<?php

$encontrado = false;  // Bandera para indicar si el cliente nos ha
                      // enviado una cookie de identificacion

while (list ($nombre, $valor) = each ($_COOKIE)) {
    if (preg_match ('/^U\d+$/', $nombre)) {
        $encontrado = true;
        $id = $nombre;

        // Si se quiere, aqui se puede hacer algo con el valor de la
        // cookie, que se encuentra en la variable $valor

        break;
    }
}

if ($encontrado)
    print "<html><body>Bienvenido $id</body></html>\n";
else {
    $id = 'U' . date ('YmdHis');  // Se prepara el ID del usuario

    $valor      = 'algo';
    $expiracion = time() + 100000;

    setcookie ($id, $valor, $expiracion);

    print '<html><body>' .
        'Bienvenido. Parece ser que esta es la primera vez que usted ' .
        "visita esta pagina.</body></html>\n";
}

?>
en donde se hace uso del arreglo auto-global $_COOKIE.

Por último, una recomendación que quisiera darte es que trates de evitar valores de identificación que, como el que tienes en este ejemplo, dependen únicamente de un valor de fecha/hora determinado. Si dos personas visitaran la página en el mismo momento, por ejemplo, corres el riesgo de que ambos reciban una ID idéntica, lo que podría representar problemas misteriosos más adelante. Sé que es improbable que tal caso se presente, y si por ejemplo tienes completa certeza sobre el modo en que tu página será visitada por los clientes, puede que no sea nada grave, pero siempre es importante ser consciente de este tipo de detalles.

Un cordial saludo
  #3 (permalink)  
Antiguo 28/07/2003, 23:00
 
Fecha de Ingreso: abril-2003
Mensajes: 80
Antigüedad: 14 años, 7 meses
Puntos: 0
Saludos maestros.

Muchas gracias por tu magnífica colaboración, porsupuesto, estaba obviando el valor que puede tener una cookie, símplemente le pongo un nombre y al momento de asignarle el valor le asigno el de la id, es decir, el valor sería U2003...etc.

Después de esto simplemente pregunto si existe la cookie y el valor que esta posee.

Bueno, sé que el método que estoy utilizando para la identificación es delicado, puedes decirme qué método utilizarias?, es decir, disminuir a cero la probabilidad que se repita.

Gracias.
  #4 (permalink)  
Antiguo 29/07/2003, 09:52
 
Fecha de Ingreso: julio-2003
Mensajes: 165
Antigüedad: 14 años, 5 meses
Puntos: 1
Bueno, personalmente creo que consideraría seriamente la posibilidad de usar los recursos relacionados con sesiones que PHP ofrece. En tal caso el manejo de IDs de sesiones sería relativamente más simple.

En su defecto, hay un número amplio de opciones a las que se suele recurrir en este tipo de situaciones. Por ejemplo, hay quienes gustan de usar valores que mezclen la fecha/hora con la dirección IP del cliente, con números o valores aleatorios. En este punto se trata ya de gustos personales...

Francamente, a menos que se incurra en métodos excesivamente cuidadosos, es muy complicado garantizar de forma absoluta que una cadena de ID determinada es única. Pero la probabilidad de que una cadena generada aleatoramiente se repita, por ejemplo, suele ser muy baja (dependiendo del modo en que se genera la cadena, por supuesto).

Quizás me inclinaría por una solución de este tipo, en el que se hace uso de la función tempnam() para crear un archivo físico con nombre único, y usar este nombre como ID:

Código:
<?php

$tmp = tempnam ('.', 'ID');
unlink ($tmp);

$id = preg_replace ('/^.*\\//', '', $tmp);

print "La secuencia de ID generada es: $id";

?>
Que estés muy bien, saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:20.