2012-05-10 15 views
15

Necesito descubrir cómo desarmar esta cookie. Todo lo que intenté hasta ahora ha fallado.cómo desarmar las cookies en PHP?

Así es como actualmente lo estoy desarmando y parece que no funciona.

setcookie("user_id", $user_id, time() - 7200); 

Esto es cómo lo fijo:

setcookie("user_id", $user_id, time() + 7200); 

tengo esta función llamada set_session_from_cookie() que comprueba si se establece una cookie, y si está establecido, se inicia una nueva sesión utilizando la cookie.

El problema es que cuando uso esto en mi página no puedo desconectarme. Supongo que es porque no puedo desarmar la sesión.

La razón por la que tengo esta función es que si un usuario desea ser recordado después de que finalizan la sesión, puede reiniciar la sesión llamando a la cookie.

function set_session_from_cookie() 
{ 
    if (isset($_SESSION['user_id'])) { 
     echo ''; 
    } else { 
     $_SESSION['user_id']=$_COOKIE['user_id']; 
    } 
} 

Salir:

<?php 
require'core.php'; 
session_destroy(); 

setcookie("user_id", "", time() - 7200); 
header('Location:/social_learning/site_pages/starter-template.php'); 

puse mi galleta con el siguiente código:

if ($rememberme == "on") { 
    $user_id = mysql_result($query_run, 0, 'id'); 
    setcookie("user_id", $user_id, time() + 7200); 
    $_SESSION['user_id'] = $user_id; 
    redirect('home_page.php'); 
} else { 
    if ($rememberme == "") { 
     echo 'ok'; 
     $user_id = mysql_result($query_run, 0, 'id'); 
     echo $user_id; 
     $_SESSION['user_id'] = $user_id; 
     redirect('home_page.php'); 
    } 
} 

¿Cómo puedo reiniciar la sesión usando la cookie guardado sin usar la función creé? Dado que la función parece estar causando que el usuario ya no pueda cerrar la sesión.

+0

¿Se supone que la cookie de ser de todo el sitio? –

+0

debería ser? ¿cómo puedo decir? – arboles

+4

No utilice tiempos relativos para desactivar las cookies. Eso hace que la desconexión dependa de que el reloj de su usuario sea preciso. Use un tiempo de '1', que atrapará a todos excepto aquellos con relojes realmente rotos que creen que es 1970. –

Respuesta

9

La solución a este problema era que la necesitaba para establecer la ruta correcta a desarmar la cookie ya que lo estaba desarmando de un archivo diferente al que originalmente lo configuré.

Descubrí qué ruta necesitaba usar para el desarmado al buscar la cookie dentro de las cookies de mi navegador, y una vez que encontré la cookie dentro de mi navegador, la ruta se encuentra cerca de la cookie. Entonces, establecí el camino a la cookie como sigue:

setcookie("user_id", $user_id, time() - 1, "/social_learning/site_pages"); 

El último parámetro es la ruta. Y funcionó.

mi original setcookie se parece a esto:

setcookie("user_id", $user_id, time() + 7200, ""); 
24

Establezca la fecha de caducidad de la cookie a una hora pasada (por ejemplo, un segundo después de epoch).

setcookie("yourCookie", "yourValue", 1);

Esto provocará que la cookie expire.

1 se usa en lugar de 0, porque 0 establece que la cookie expira al final de la sesión.

+0

es 1 considerado un tiempo en el pasado? – arboles

+1

@arboles La hora se da en forma de una marca de tiempo UNIX, así que sí, 1 fue hace mucho tiempo :) –

+13

1 es "1 de enero, 19:70 00:00:01 AM" –

3

mirar el manual de PHP para obtener información sobre setcookie

http://php.net/manual/en/function.setcookie.php

Estas notas deben explicar el proceso:

bool setcookie (string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]]) 

cookies deben ser borrados con los mismos parámetros, ya que se establecieron con. Si el argumento de valor es una cadena vacía, o FALSO, y todos los demás argumentos concuerdan con una llamada previa a setcookie, la cookie con el nombre especificado se eliminará del cliente remoto. Este se logra internamente al establecer el valor 'borrado' y la expiración de un año en el pasado.

Como la configuración de una cookie con un valor de FALSE intentará eliminar la cookie , no debe usar valores booleanos. En su lugar, use 0 para FALSE y 1 para TRUE.

+0

Actualmente estoy haciendo esto, utilizando los mismos parámetros para eliminar, ya que estoy para establecer. y no está funcionando. – arboles

6

Hay algunas preocupaciones de seguridad con respecto a su código, sin embargo, para responder a su pregunta, ha decidido eliminar una cookie en PHP, todo lo que necesita hacer es fijar el tiempo de caducidad a un tiempo en el pasado:

setcookie("user_id", "", time()-10, "/"); 

"loginform.php" no es un dominio válido, ese podría ser el problema aquí.

+0

¿cómo puedo configurar el dominio, en mi host local? – arboles

+0

simplemente ponga una barra como la que tenía en el ejemplo "/", eso es todo, esto significa que esta cookie está disponible para todo su dominio. –

1

En manual de PHP, puede eliminar una cookie mediante el establecimiento de una fecha de caducidad está en el pasado:

setcookie("key","",time()-3600); 

En algunos casos, se debe proporcionar ruta y el dominio de argumentos.

De hecho, si se asigna una cookie con una cadena vacía, que va a ser desactivado también:

setcookie("key",""); 
+0

lo sé, actualmente estoy haciendo este método, y no está funcionando. – arboles

+0

Quizás tenga que especificar la ruta y el dominio manualmente. –

4

uso este código

setcookie("CookieName", "", time()-(60*60*24), "/"); 

funciona cada vez para mí en todos los sitios web