쿠키 설정 에 대한 PHP 문서를 보면 쿠키 의 만료 날짜를 설정할 수 있습니다. 브라우저 세션이 끝날 때 또는 나중에 언젠가 쿠키가 만료되도록 설정할 수 있지만 쿠키가 만료되지 않도록 설정하는 방법은 보이지 않습니다. 이것이 가능하며 어떻게 달성됩니까?
답변
모든 쿠키는 쿠키 사양에 따라 만료 되므로 이는 PHP 제한이 아닙니다.
먼 미래 날짜를 사용하십시오. 예를 들어, 10 년 후에 만료되는 쿠키를 설정하십시오.
setcookie(
"CookieName",
"CookieValue",
time() + (10 * 365 * 24 * 60 * 60)
);
32 비트 PHP에서 2038 년 이후 의 날짜를 설정 하면 숫자가 줄 바꿈되어 쿠키가 즉시 만료됩니다.
답변
최대 값 : 2147483647
setcookie("CookieName", "CookieValue", 2147483647);
정수 오버플로를 피하려면 타임 스탬프를 다음과 같이 설정해야합니다.
2^31 - 1 = 2147483647 = 2038-01-19 04:14:07
더 높은 값을 설정하면 이전 브라우저에서 문제가 발생할 수 있습니다.
Max-Age=value OPTIONAL. The value of the Max-Age attribute is delta-seconds, the lifetime of the cookie in seconds, a decimal non-negative integer. To handle cached cookies correctly, a client SHOULD calculate the age of the cookie according to the age calculation rules in the HTTP/1.1 specification [RFC2616]. When the age is greater than delta-seconds seconds, the client SHOULD discard the cookie. A value of zero means the cookie SHOULD be discarded immediately.
캐시가 나타낼 수있는 최대 양의 정수보다 큰 값을 받거나 에이지 계산 중 오버플로가 발생하면 값이 2147483648 (2 ^ 31) 인 Age 헤더를 전송해야합니다.
http://www.faqs.org/rfcs/rfc2616.html
답변
미래의 절대 시간을 설정하십시오 .
setcookie("CookieName", "CookieValue", 2147483647);
허용 된 답변에서 권장하는 현재 시간을 기준으로 계산하는 것보다 절대 시간을 사용하는 것이 좋습니다.
32 비트 시스템과 호환되는 최대 값은 다음과 같습니다.
2147483647 = 2^31 = ~year 2038
답변
내 특권으로 인해 첫 번째 게시물에 대한 의견을 작성하지 못하므로 여기로 이동해야합니다.
현재 날짜로부터 20 년 전에 설정 한 경우 위의 정답으로 제안되는 2038 유닉스 버그 를 고려해야합니다 .
2018 년 1 월 19 일 + (20 년) 쿠키는 브라우저 또는 실행중인 버전에 따라 2038 문제를 일으킬 수 있습니다.
답변
끝없는 루프를 말할 수는 없으며 쿠키는 현재 날짜 + 1로 만료되므로 항상 내일이므로 만료 예정 날짜에 도달하지 않습니까? 약간 과잉이지만 말만합니다.
답변
이것이 가능하지는 않지만 Google과 비슷한 작업을 수행하고 쿠키를 2038 년 1 월 17 일 또는 그와 동일하게 만료되도록 설정할 수 있습니다.
실제로는 쿠키를 사용하는 대부분의 머신보다 오래 사용해야하는 10 년 또는 60 * 60 * 24 * 365 * 10의 쿠키를 설정하는 것이 좋습니다.
답변
클라이언트 시스템에서 데이터를 영구적으로 유지하거나 최소한 브라우저 캐시가 완전히 비워 질 때까지 Javascript 로컬 스토리지를 사용하십시오.
https://developer.mozilla.org/en-US/docs/DOM/Storage#localStorage
최대 저장 기간이 0 인 쿠키처럼 지워 지므로 세션 저장소를 사용하지 마십시오.