Как получить время истечения срока действия куки - PullRequest
56 голосов
/ 17 ноября 2010

Когда я создаю куки, как узнать время истечения куки?

Ответы [ 6 ]

90 голосов
/ 02 сентября 2012

Размещение закодированного 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;

и т. Д.Я считаю, что это гораздо более удобный способ использования куки, потому что вы можете вкладывать столько маленьких объектов в другие объекты, сколько пожелаете!

47 голосов
/ 17 ноября 2010

Этого сложно достичь, но срок годности файла cookie можно установить в другом файле cookie.Этот файл cookie может быть прочитан позже, чтобы получить дату окончания срока действия.Может быть, есть лучший способ, но это один из способов решения вашей проблемы.

9 голосов
/ 24 ноября 2011

Вы можете установить значение 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

6 голосов
/ 17 ноября 2010

При создании файла cookie через PHP die Значение по умолчанию равно 0, из руководства:

Если установлено в 0 или опущено, cookie истекает в конце сессии (когда браузер закрывается)

В противном случае вы можете установить время жизни куки в секундах в качестве третьего параметра:

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

Но если вы хотите получить оставшееся время существования уже существующего cookie, я боюсь, что это невозможно (по крайней мере, не прямым способом).

0 голосов
/ 13 апреля 2019

Кажется, есть список всех файлов cookie, отправленных браузеру в массиве, который возвращается php's headers_list(), который, помимо прочих данных, возвращает элементы " Set-Cookie " следующим образом:

Set-Cookie: <strong>cooke_name</strong>=<strong>cookie_value</strong>; expires=<strong>expiration_time</strong>; Max-Age=<strong>age</strong>; path=<strong>path</strong>; domain=<strong>domain</strong>

Таким образом, вы также можете получить удаленные, так как их значение удалено :

Set-Cookie: <strong>cooke_name</strong>=<strong>deleted</strong>; expires=<strong>expiration_time</strong>; Max-Age=<strong>age</strong>; path=<strong>path</strong>; domain=<strong>domain</strong>

Оттуда легко получить срок действиявремя или возраст для конкретного куки.Имейте в виду, что этот массив, вероятно, доступен только для ПОСЛЕ фактического вызова setcookie(), поэтому он действителен для сценария, который уже завершил свою работу.Я не проверял это каким-либо другим способом, так как у меня это отлично работало.

Это довольно старая тема, и я не уверен, что это верно для всех сборок php, но я подумалможет быть полезным.

Для получения дополнительной информации см .:

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

0 голосов
/ 12 сентября 2014

Чтобы срок действия файлов 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 в разных файлах , в противном случае вы каждый раз будете получать одну и ту же дату окончания срока действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...