development

쿠키의 만료 시간을 얻는 방법

big-blog 2020. 12. 10. 20:48
반응형

쿠키의 만료 시간을 얻는 방법


쿠키를 만들 때 쿠키의 만료 시간을 어떻게 알 수 있습니까?


이것은 달성하기 어렵지만 쿠키 만료 날짜는 다른 쿠키에서 설정할 수 있습니다. 이 쿠키는 만료 날짜를 얻기 위해 나중에 읽을 수 있습니다. 더 나은 방법이있을 수 있지만 이것이 문제를 해결하는 방법 중 하나입니다.


인코딩 된 json을 쿠키 안에 넣는 것이 제가 가장 좋아하는 방법으로 쿠키에서 적절한 형식의 데이터를 가져옵니다. 시도해보십시오.

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

쿠키 자체에 데이터로 삽입 된 만료 시간을 간단히 추출 할 수 있습니다.

$expiry = $cookie->expiry;

그리고 추가로 사용 가능한 객체로 나올 데이터 :)

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

등. 쿠키를 사용하는 훨씬 깔끔한 방법이라는 것을 알게되었습니다. 원하는만큼 다른 개체 내에 작은 개체를 중첩 할 수 있기 때문입니다.


만료가 포함 된 쿠키 값을 설정하고 쿠키 값에서 만료를 가져올 수 있습니다.

// 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


PHP die를 통해 쿠키를 만들 때 기본값은 매뉴얼에서 0입니다.

0으로 설정하거나 생략하면 세션이 끝날 때 (브라우저가 닫힐 때) 쿠키가 만료됩니다.

그렇지 않으면 세 번째 매개 변수로 쿠키 수명을 초 단위로 설정할 수 있습니다.

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

그러나 이미 존재하는 쿠키의 남은 수명을 얻으려면 가능하지 않습니다 (적어도 직접적인 방법은 아님).


쿠키 만료 시간을 얻으려면이 간단한 방법을 사용하십시오.

<?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를 서로 다른 파일 에 보관해야 합니다 . 그렇지 않으면 매번 동일한 만료 날짜가 표시됩니다.


It seems there's a list of all cookies sent to browser in array returned by php's headers_list() which among other data returns "Set-Cookie" elements as follows:

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

This way you can also get deleted ones since their value is deleted:

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

From there on it's easy to retrieve expiration time or age for particular cookie. Keep in mind though that this array is probably available only AFTER actual call to setcookie() has been made so it's valid for script that has already finished it's job. I haven't tested this in some other way(s) since this worked just fine for me.

This is rather old topic and I'm not sure if this is valid for all php builds but I thought it might be helpfull.

For more info see:

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

참고URL : https://stackoverflow.com/questions/4203225/how-to-get-cookies-expire-time

반응형