如何得到饼干的过期时间

当我创建一个 cookie 时,如何得到 cookie 的过期时间?

115241 次浏览

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

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

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

否则,可以将 cookies 生存期(秒)设置为第三个参数:

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

但是,如果您想要获得已经存在的 cookie 的剩余生命周期,我担心这是不可能的(至少不是以直接的方式)。

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

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


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

//请记住,在这种情况下,一些双向加密将更加安全

将编码的 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 = json_decode( $_COOKIE[ "cookiename" ] );

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

$expiry = $cookie->expiry;

另外,这些数据将成为可用的对象:)

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

等等。我发现这是一种更简洁的使用 cookie 的方法,因为您可以在其他对象中嵌套任意多的小对象,只要您愿意!

要获得 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...";
}

?>

你需要保持 不同文件中的第1部分和第2部分,否则你会得到相同的过期日期每次。

这里似乎有一个所有 Cookie 发送到浏览器的列表,由 php 的 headers_list()返回,在其他数据返回“ 设置-饼干”元素如下:

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