2010-11-17 30 views
45

Cuando creo una cookie, ¿cómo obtener la cookie expire time?Cómo obtener el tiempo de caducidad de la cookie

Muchas gracias.

+2

http://bytes.com/topic/php/answers/486298-get-cookie-expiry-time –

+1

¿Qué quiere decir con obtener el tiempo de caducidad de una cookie? ¿Quieres saber cómo calcularlo? ¿O cómo recuperarlo de una cookie ya configurada? – Gumbo

+0

Puede usar 'Cookie :: parse ($ cookieHeader)' con https: // github.com/delight-im/PHP-Cookie y 'ResponseHeader :: get ('Set-Cookie')' si no sabes cómo obtener el encabezado de la cookie de lo contrario. – caw

Respuesta

40

Esto es difícil de lograr, pero la fecha de caducidad de la cookie se puede establecer en otra cookie. Esta cookie se puede leer más tarde para obtener la fecha de vencimiento. Tal vez hay una mejor manera, pero este es uno de los métodos para resolver su problema.

+10

Sí, este es el camino. Esto es lo que dice Microsoft: "El navegador es responsable de administrar las cookies, y la fecha y hora de caducidad de la cookie ayudan al navegador a administrar su almacenamiento de cookies. Por lo tanto, aunque puede leer el nombre y el valor de una cookie, no puede leerla fecha y hora de vencimiento. Cuando el navegador envía información de cookies al servidor, el navegador no incluye la información de caducidad ". http://msdn.microsoft.com/en-us/library/ms178194(v=vs.100).aspx – Riga

6

Cuando se crea una cookie a través de PHP mueren valor por defecto es 0, desde el manual:

Si se establece en 0, o se omite, la cookie expirará al final de la sesión (cuando el navegador se cierra)

de lo contrario, puede definir el tiempo de vida en segundos galletas como tercer parámetro:

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

Pero si quiere obtener el tiempo de vida restante de una cookie ya existente, me temo que eso no es posible (al menos no de manera directa).

8

Puede establecer el valor de su cookie que contiene el vencimiento y obtener su vencimiento del valor de la cookie.

// set 
$expiry = time()+3600; 
setcookie("mycookie", "mycookievalue|$expiry", $expiry); 

// get 
if (isset($_COOKIE["mycookie"])) { 
    list($value, $expiry) = explode("|", $_COOKIE["mycookie"]); 
} 

// Recuerde, algunas encriptaciones bidireccionales serían más seguras en este caso. Ver: https://github.com/qeremy/Cryptee

66

Poner un json codificado dentro de la cookie es mi método favorito, para obtener datos formateados correctamente de una cookie. Trate de que :

$expiry = time() + 12345; 
$data = (object) array("value1" => "just for fun", "value2" => "i'll save whatever I want here"); 
$cookieData = (object) array("data" => $data, "expiry" => $expiry); 
setcookie("cookiename", json_encode($cookieData), $expiry); 

luego, cuando llegue la cookie próxima vez:

$cookie = json_decode($_COOKIE[ "cookiename" ]); 

pueda extraer el tiempo de caducidad, que se inserta como datos dentro de la propia galletas ..

$expiry = $cookie->expiry; 

y, además, los datos que va a salir como un objeto utilizable :)

$data = $cookie->data; 
$value1 = $cookie->data->value1; 

etc. Creo que es una forma mucho más ordenada de usar cookies, ¡porque puedes anidar tantos objetos pequeños dentro de otros objetos como desees!

+3

Esta es la respuesta ganadora. Gracias. –

+0

También creo que esta es la mejor respuesta (o estrategia). ¿Por qué crear otra cookie cuando puede usar la misma cookie para almacenar datos de caducidad? – Andrew

+0

Absolutamente inteligente ... Desearía poder otorgar más representantes de los permitidos. 1+! –

0

Para obtener el tiempo de caducidad de las cookies, utilice este sencillo método.

<?php 

//#############PART 1############# 
//expiration time (a*b*c*d) <- change D corresponding to number of days for cookie expiration 
$time = time()+(60*60*24*365); 
$timeMemo = (string)$time; 

//sets cookie with expiration time defined above 
setcookie("testCookie", "" . $timeMemo . "", $time); 

//#############PART 2############# 
//this function will convert seconds to days. 
function secToDays($sec){ 

    return ($sec/60/60/24); 

} 
//checks if cookie is set and prints out expiration time in days 
if(isset($_COOKIE['testCookie'])){ 

    echo "Cookie is set<br />"; 
    if(round(secToDays((intval($_COOKIE['testCookie']) - time())),1) < 1){ 
     echo "Cookie will expire today."; 
    }else{ 
     echo "Cookie will expire in " . round(secToDays((intval($_COOKIE['testCookie']) - time())),1) . " day(s)"; 
    } 

}else{ 
    echo "not set..."; 
} 

?>

Es necesario tener Parte 1 y Parte 2 en diferentes archivos, de lo contrario obtendrá la misma fecha cada vez que expira.

Cuestiones relacionadas