web-dev-qa-db-fra.com

Comment obtenir le délai d'expiration des cookies

Lorsque je crée un cookie, comment obtenir son expiration?

56
love

Ceci est difficile à réaliser, mais la date d'expiration du cookie peut être définie dans un autre cookie. Ce cookie peut ensuite être lu plus tard pour obtenir la date d'expiration. Il y a peut-être une meilleure façon, mais c'est l'une des méthodes pour résoudre votre problème.

47
Thariama

Mettre un json encodé à l'intérieur du cookie est ma méthode préférée, pour obtenir des données correctement formatées à partir d'un cookie. Essayez ça:

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

puis quand vous recevrez votre cookie la prochaine fois:

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

vous pouvez simplement extraire le délai d'expiration, qui a été inséré en tant que données dans le cookie lui-même.

$expiry = $cookie->expiry;

et en plus les données qui sortiront comme un objet utilisable :)

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

etc. Je trouve que c'est une façon beaucoup plus nette d'utiliser les cookies, car vous pouvez imbriquer autant de petits objets dans d'autres objets que vous le souhaitez!

90
Braikar

Vous pouvez définir votre valeur de cookie contenant l'expiration et obtenir votre expiration à partir de la valeur du cookie.

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

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

// N'oubliez pas, un cryptage bidirectionnel serait plus sûr dans ce cas. Voir: https://github.com/qeremy/Cryptee

9
K-Gun

Lorsque vous créez un cookie via PHP die La valeur par défaut est 0, d'après le manuel:

S'il est défini sur 0 ou omis, le cookie expirera à la fin de la session (à la fermeture du navigateur)

Sinon, vous pouvez définir la durée de vie des cookies en secondes comme troisième paramètre:

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

Mais si vous voulez obtenir la durée de vie restante d'un cookie déjà existant, je crains que ce ne soit pas possible (du moins pas de manière directe).

6
Hannes

Il semble qu'il y ait une liste de tous les cookies envoyés au navigateur dans le tableau retourné par le php headers_list() qui, entre autres, renvoie " Set-Cookie " éléments comme suit:

Set-Cookie: cooke_name=cookie_value; expires=expiration_time; Max-Age=age; path=path; domain=domain

De cette façon, vous pouvez également obtenir ceux supprimés puisque leur valeur est supprimée :

Set-Cookie: cooke_name=deleted; expires=expiration_time; Max-Age=age; path=path; domain=domain

À partir de là, il est facile de récupérer l'heure d'expiration ou l'âge d'un cookie particulier. Gardez à l'esprit que ce tableau est probablement disponible uniquement [~ # ~] après [~ # ~] l'appel réel à setcookie() a été fait donc il est valable pour le script qui a déjà terminé son travail. Je n'ai pas testé cela d'une autre manière car cela a très bien fonctionné pour moi.

C'est un sujet assez ancien et je ne sais pas si c'est valable pour toutes les versions de php mais j'ai pensé que cela pourrait être utile.

Pour plus d'informations, voir:

https://www.php.net/manual/en/function.headers-list.php
https://www.php.net/manual/en/function.headers-sent.php

0
sasho

Pour obtenir le délai d'expiration des cookies, utilisez cette méthode simple.

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

?>

Vous devez conserver Partie 1 et Partie 2 dans des fichiers différents, sinon vous obtiendrez la même date d'expiration à chaque fois.

0
Pedro Sousa