Foros del Web » Programando para Internet » PHP »

como matar la cookie de forma sencilla

Estas en el tema de como matar la cookie de forma sencilla en el foro de PHP en Foros del Web. hola, tengo una página que reconoce usuarios. mi objetivo es que si entras en la página lea si hay cookie y por ejemplo te de ...
  #1 (permalink)  
Antiguo 22/08/2003, 02:57
Avatar de kaiowas  
Fecha de Ingreso: septiembre-2001
Ubicación: el averno...
Mensajes: 531
Antigüedad: 22 años, 7 meses
Puntos: 0
como matar la cookie de forma sencilla

hola,

tengo una página que reconoce usuarios.

mi objetivo es que si entras en la página lea si hay cookie y por ejemplo te de un saludo, pero por otro lado te de opcion de salir si no eres tu.

quiero hacer algo como:

Hola Usuario,
si no eres tu click aqui para ingresar con tu nick.

al clickar te lleva a la página de ingreso, pero ya debería haber matado a la anterior cookie.

¿alguna idea de DONDE y CUANDO matar la cookie?

gracias
  #2 (permalink)  
Antiguo 22/08/2003, 10:07
 
Fecha de Ingreso: julio-2003
Mensajes: 165
Antigüedad: 20 años, 9 meses
Puntos: 1
Hola kaiowas,

Mmmm, si eres quien creo que eres, ¡me alegra verte después de tanto tiempo! Aunque no sé si te acuerdes de mí; solía visitar estos foros hace algún tiempo ya, y en ese entonces usaba el nick `Eric'. De hecho, si no me equivoco, aun tenemos pendiente un asunto relacionado con algunas birras.. jeje :)


Y bien, sobre el problema que mencionas, se me ocurren, en principo, dos alternativas:
  • Utilizar una página intermedia para eliminar la cookie. Por supuesto, no es una solución muy cómoda, y muy posiblemente la has descartado ya precisamente por lo poco natural que parece tener que recurrir a una página extra sólo para eliminar el efecto de una cookie.
  • Por otra parte, pienso que quizás no es completamente necesario que la cookie haya sido eliminada antes de visitar la página de inicio de sesión. Un escenario posible es que dentro de tu página de inicio de sesión elimines todas las cookies existentes (o únicamente aquellas relacionadas con el mecanismo de autenticación) y mostrar siempre un formulario de inicio de sesión. Algo como:

    Código:
    <?php
    
    // Eliminar cookies
    
    foreach (array_keys ($_COOKIE) as $nombre) {
        setcookie ($nombre, "", time() - 3600);
        unset ($_COOKIE[$nombre]);
    }
    
    ?>
    
    <p>Por favor ingrese sus datos de inicio de sesión:</p>
    
    <form action="validar.php" method="post">
    <table>
    <tr>
        <td>Nombre de usuario:</td>
        <td><input name="usuario" /></td>
    </tr>
    <tr>
        <td>Contraseña:</td>
        <td><input type="password" name="contrasenya" /></td>
    </tr>
    <tr>
        <td colspan="2"><input type="submit" value=" Ingresar " /></td>
    </tr>
    </table>
    </form>
    
    Pero bueno, hay otro posible escenario, y es que no puedas darte el lujo de eliminar todas las cookies en la página de inicio de sesión, y ésta deba verificar además si el usuario ya inició su sesión.

    Este es un inconveniente particularme común cuando no se cuenta con una página dedicada exclusivamente al inicio de sesión de un usuario, en cuyo caso esta página podría simplemente ignorar cualquier cookie existente. Si el inicio de sesión se encuentra en una página en donde debe aplicarse el mecanismo de autenticación, y dependiendo de éste debe mostrar el formulario de inicio de sesión o no, entonces podría recurrirse a una variable adicional que indique si debe forzarse la eliminación de cookies y el envío del formulario de inicio de sesión al cliente.

Yo sé que este último punto suena un poco confuso. Pero consideremos el siguiente ejemplo, y veamos si nos aclara un poco las cosas.

Supongamos que contamos con el valor de una cookie llamada `sesion' para verificar si un usuario ya ha iniciado su sesión. Pensemos que entonces la página de inicio de sesión luce algo así:


Código:
<?php

// Si existe la cookie `sesion' significa que el usuario ya ha
// iniciado su sesion.

if (isset ($_COOKIE['sesion'])) {

    // Supongamos que la cookie `nombre' tiene el nombre del usuario
    echo 'Hola ' . $COOKIE['nombre'];

    // Aqui se pueden incluir mas cosas....

} else {  // Si el usuario aparentemente no ha iniciado su sesion

    echo <<<FIN_FORMULARIO
<p>Por favor ingrese sus datos de inicio de sesión:</p>

<form action="validar.php" method="post">
<table>
<tr>
    <td>Nombre de usuario:</td>
    <td><input name="usuario" /></td>
</tr>
<tr>
    <td>Contraseña:</td>
    <td><input type="password" name="contrasenya" /></td>
</tr>
<tr>
    <td colspan="2"><input type="submit" value=" Ingresar " /></td>
</tr>
</table>
</form>
FIN_FORMULARIO;

}  // Cierre del `else'

?>

Bajo este modelo, es claro que si dirigimos al usuario hacia la página de inicio de sesión cuando la cookie `sesion' ya ha sido definida, el usuario no verá nunca el formulario de inicio de sesión:

Código:
Hola Usuario,
si no eres tu <a href="inicio.php">click aqui para ingresar</a> con tu nick.

En este caso, el uso de una variable adicional, que por ejemplo podríamos pasar en el query de la URL para recuperarla como una variable GET, podría sacarnos del lío. Nuestro mensaje tendría que ser modificado por algo de este estilo:

Código:
Hola Usuario,
si no eres tu <a href="inicio.php?logout=1">click aqui para ingresar</a> con tu nick.
Nótese la definición de la variable `logout', cuyo valor no es importante, sólo nos interesa que sea definida.

De este modo, nuestra página de inico de sesión podría ser modificada para que se validara la existencia de la variable logout:

Código:
// Si existe la cookie `sesion', y _no_ esta definida la variable
// `logout' pasada por el metodo GET, significa que el usuario ya ha
// iniciado su sesion.

if (isset ($_COOKIE['sesion']) and ! isset ($_GET['logout'])) {

// Aqui viene el resto del codigo

Por supuesto, todo esto podría adaptarse dependiendo de cómo estés implementando tu mecanismo de validación de usuarios. Sería cuestión de que nos brindaras más información para poder estudiar más a fondo el problema. :)

Un cordial saludo
  #3 (permalink)  
Antiguo 22/08/2003, 17:36
Avatar de kaiowas  
Fecha de Ingreso: septiembre-2001
Ubicación: el averno...
Mensajes: 531
Antigüedad: 22 años, 7 meses
Puntos: 0
QUE BUENO VERTE DE NUEVO COLEGUI!!!!!!

a este paso te debo una mariscada amigo...

bueno, el sistema que reconoce usuarios es ultra simple (sacado en parte de maesrosdelweb.com), de hecho tengo pensado escalarlo poco a poco, pero de momento lo dejo simple y cutre como és. Me he guardado toda la información que me has dado, pues tengo que primero masticarla, soy un pobre principiante...

mas o menos funciona asi:

es una página con frames, en el frame de la derecha establezco la condicion de:

- si hay cookie muestra el nombre y saluda, pero da la opción a salir y muestra formulario de ingreso para cambiar nick.

- sino la hay, muestra el formulario de ingreso pero da la opción a registrar nuevo usuario.

de manera que si hay cookie, pero quieres matarla he decidido hacer un link a una página que contiene esto:

Código PHP:
<?php
      
    
if(isset($_COOKIE["usNick"]))
    {
        
        
setcookie("usNick","x",time()-3600,'/');
        
        
header("Location: ../rightframe.php");
        
    }
    else
    {
    
        
header("Location: ../rightframe.php");
        
    };

?>

veo que es mas común utilizar sesiones, pero no las comprendo aun, tengo demasiado que aprender..... pero MUCHAS GRACIAS POR ESTE MENSAJOTE....

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 19:41.