[php] 쿠키가 만료되지 않도록 설정

쿠키 설정 에 대한 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

더 높은 값을 설정하면 이전 브라우저에서 문제가 발생할 수 있습니다.

쿠키에 대한 RFC 도 참조하십시오 .

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.

RFC 2616, 14.6 연령 :

캐시가 나타낼 수있는 최대 양의 정수보다 큰 값을 받거나 에이지 계산 중 오버플로가 발생하면 값이 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 인 쿠키처럼 지워 지므로 세션 저장소를 사용하지 마십시오.