2010-11-17 17 views
45

Quando creo un cookie, come ottenere il cookie expire time?Come ottenere il tempo di scadenza del cookie

Grazie mille.

+2

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

+1

Cosa intendi quando ottieni la data di scadenza di un cookie? Vuoi sapere come calcolarlo? O come recuperarlo da un cookie già impostato? – Gumbo

+0

È possibile utilizzare 'Cookie :: parse ($ cookieHeader)' con https: // github.com/delight-im/PHP-Cookie e 'ResponseHeader :: get ('Set-Cookie')' se non sai come ottenere altrimenti l'intestazione del cookie. – caw

risposta

40

Questo è difficile da raggiungere, ma la data di scadenza del cookie può essere impostata in un altro cookie. Questo cookie può quindi essere letto più tardi per ottenere la data di scadenza. Forse c'è un modo migliore, ma questo è uno dei metodi per risolvere il tuo problema.

+10

Sì, questo è il modo. Questo è ciò che Microsoft dice: "Il browser è responsabile della gestione dei cookie e l'ora e la data di scadenza del cookie aiutano il browser a gestire il suo archivio di cookie, quindi, sebbene sia possibile leggere il nome e il valore di un cookie, non è possibile leggere i cookie data e ora di scadenza Quando il browser invia le informazioni sui cookie al server, il browser non include le informazioni sulla scadenza. " http://msdn.microsoft.com/en-us/library/ms178194(v=vs.100).aspx – Riga

6

Quando si crea un cookie tramite PHP die Valore predefinito è 0, dal manuale:

Se impostato su 0, oppure omesso, il cookie scadrà alla fine della sessione (quando il browser si chiude)

in caso contrario è possibile impostare la durata in secondi cookie come terzo parametro:

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

Ma se si intende ottenere la durata residua di un cookie già esistente, temo che non sia possibile (almeno non in modo diretto).

8

È possibile impostare il valore del cookie contenente la scadenza e ottenere la scadenza dal valore del cookie.

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

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

// Ricorda, alcune crittografia a due vie sarebbero più sicure in questo caso. Vedi: https://github.com/qeremy/Cryptee

66

Inserire un json codificato all'interno del cookie è il mio metodo preferito, per ottenere dati correttamente formattati da un cookie. Prova che:

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

poi quando si arriva il cookie prossima volta:

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

si può semplicemente estrarre il tempo di scadenza, che è stato inserito come dati all'interno del cookie stesso ..

$expiry = $cookie->expiry; 

e inoltre i dati che verranno fuori come oggetto utilizzabile :)

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

ecc. Trovo che sia un modo molto più ordinato di usare i cookie, perché puoi annidare tanti piccoli oggetti all'interno di altri oggetti come desideri!

+3

Questa è la risposta vincente. Grazie. –

+0

Penso anche che questa sia la risposta migliore (o strategia). Perché creare un altro cookie quando è possibile utilizzare lo stesso cookie per archiviare i dati di scadenza? – Andrew

+0

Assolutamente intelligente ... Vorrei poter assegnare più rappresentanti di quelli consentiti. 1+! –

0

Per ottenere i cookie scadono il tempo, utilizzare questo metodo semplice.

<?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..."; 
} 

?>

È necessario mantenere Parte 1 e Parte 2 in diversi file, altrimenti si otterrà la stessa data di scadenza ogni volta.

Problemi correlati