Когда я создаю куки, как получить время истечения куки?
Как получить время истечения срока действия cookie
Ответ 1
Этого трудно достичь, но дату истечения срока действия файла cookie можно установить в другом файле cookie. Затем этот файл cookie может быть прочитан для получения даты истечения срока действия. Возможно, есть лучший способ, но это один из способов решения вашей проблемы.
Ответ 2
Вставка закодированного 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, потому что вы можете вложить столько маленьких объектов в другие объекты, сколько хотите!
Ответ 3
Вы можете установить значение 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
Ответ 4
Когда вы создаете файл cookie через PHP die Значение по умолчанию равно 0, из руководства:
Если установлено значение 0 или опущено, файл cookie истечет в конце сессии (когда браузер закрывается)
В противном случае вы можете установить время жизни файлов cookie в секундах в качестве третьего параметра:
http://www.php.net/manual/en/function.setcookie.php
Но если вы хотите получить оставшееся время жизни уже существующего файла cookie, я боюсь, что это невозможно (по крайней мере, не прямо).
Ответ 5
Чтобы получить время истечения срока действия 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 в разных файлах, иначе вы получите ту же самую дату истечения срока действия каждый раз.
Ответ 6
Кажется, что есть список всех куки, отправленных браузеру в массиве, возвращаемом 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
Оттуда легко получить время истечения или возраст для конкретного куки. Имейте в виду, что этот массив, вероятно, доступен только ПОСЛЕ того, как был сделан фактический вызов setcookie()
, поэтому он действителен для скрипта, который уже завершил свою работу. Я не проверял это каким-либо другим способом, так как у меня это работало нормально.
Это довольно старая тема, и я не уверен, подходит ли она для всех сборок php, но я подумал, что это может быть полезно.
Для получения дополнительной информации см.:
https://www.php.net/manual/en/function.headers-list.php
https://www.php.net/manual/en/function.headers-sent.php