쿠키를 만료되지 않도록 설정

쿠키 설정에 관한 php 문서를 보면 쿠키의 유효기간을 설정할 수 있습니다.cookie는 브라우저 세션 종료 시 또는 향후 만료되도록 설정할 수 있지만 만료되지 않도록 설정하는 방법은 없습니다.이것이 가능하기나 할까요?또, 어떻게 실현될까요?



질문에 대한 답변



쿠키 사양에 따라 모든 쿠키가 만료되므로 이는 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 unix 오류를 고려해야 합니다.

2018년 1월 19일 + (20년) 쿠키의 경우 브라우저 및 버전에 따라 2038 문제가 발생할 수 있습니다.




종료되지 않는 루프라고 하면 안 될까요?쿠키는 현재 날짜 + 1로 만료되므로 만료 예정일에 도달하지 않습니다.항상 내일이기 때문입니다.조금 과잉 살상이지만 그냥 말했을 뿐이다.