如何获取cookie的过期时间

时间:2010-11-17 09:52:42

标签: php cookies

当我创建cookie时,如何获取cookie的过期时间?

6 个答案:

答案 0 :(得分:90)

将编码的json放入cookie中是我最喜欢的方法,可以从cookie中获取正确的格式化数据。 试试这个:

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

然后当你下次拿到你的cookie时:

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

您可以简单地提取到期时间,该时间作为数据插入到cookie本身内。

$expiry = $cookie->expiry;

以及将作为可用对象出现的数据:)

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

等。我发现这是一种更简洁的使用cookie的方式,因为你可以根据自己的意愿在其他对象中嵌入尽可能多的小对象!

答案 1 :(得分:46)

这很难实现,但cookie的到期日期可以在另一个cookie中设置。然后可以稍后阅读此cookie以获取到期日期。也许有更好的方法,但这是解决问题的方法之一。

答案 2 :(得分:9)

您可以设置包含到期日期的Cookie值,并从Cookie值中获取到期日期。

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

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

//请记住,在这种情况下,某些双向加密会更安全。请参阅:https://github.com/qeremy/Cryptee

答案 3 :(得分:6)

当您通过PHP创建cookie时,默认值为0,来自手册:

  

如果设置为0或省略,则为cookie   将在会议结束时到期   (当浏览器关闭时)

否则,您可以将cookie生命周期设置为秒,作为第三个参数:

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

但如果你的意思是获得已经存在的cookie的剩余寿命,我担心这是不可能的(至少不是直接的)。

答案 4 :(得分:0)

要获得Cookie过期时间,请使用此简单方法。

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

&GT;

您需要将第1部分和第2部分保存在不同的文件中,否则您每次都会获得相同的过期日期。

答案 5 :(得分:0)

似乎有一个列表,其中包含所有发送到浏览器的cookie列表,这些列表由php的headers_list()返回,其中的其他数据返回“ Set-Cookie ”元素,如下所示:

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

这样,由于它们的值被删除,因此您也可以删除它们:

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

从那里很容易检索特定cookie的到期时间或期限。请记住,尽管可能仅在之后实际调用setcookie()时才可用此数组,所以它对已经完成工作的脚本有效。我没有用其他方法进行过测试,因为这对我来说很好。

这是一个比较老的话题,我不确定这是否对所有php版本都有效,但我认为这可能会有所帮助。

有关更多信息,请参见:

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