Подтвердить что ты не робот

Как получить время истечения срока действия cookie

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

4b9b3361

Ответ 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