programing

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

sourcejob 2022. 9. 21. 23:29
반응형

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

쿠키 설정에 관한 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로 만료되므로 만료 예정일에 도달하지 않습니다.항상 내일이기 때문입니다.조금 과잉 살상이지만 그냥 말했을 뿐이다.

구글이 하는 것과 비슷한 일을 할 수는 없지만, 쿠키가 2038년 1월 17일에 만료되거나, 아니면 그보다 훨씬 더 먼 일을 하도록 설정할 수도 있다.

실질적으로 쿠키를 10년간 설정하거나 60*60*24*365*10으로 설정하는 것이 좋습니다.이것은 쿠키가 존속하는 대부분의 머신보다 오래 사용할 수 있습니다.

클라이언트 컴퓨터에 데이터를 영구적으로 유지하거나 브라우저 캐시가 완전히 비워질 때까지 데이터를 유지하려면 Javascript 로컬 스토리지를 사용하십시오.

https://developer.mozilla.org/en-US/docs/DOM/Storage#localStorage

세션 스토리지는 최대 에이징이 0인 쿠키와 마찬가지로 클리어되므로 사용하지 마십시오.

'절대'와 '영원히'는 인생의 예측불가능성 때문에 피해야 할 단어다.

부호 있는 정수를 사용하여 저장할 수 있는 이후 마지막 시간은 (231-1 = 2,147,483,647)입니다.이 제한은 Year 2038 문제로 알려져 있습니다.

setCookie("name", "value", strtotime("2038-01-19 03:14:07"));

날짜로부터 먼 날짜를 설정할 수 있습니다.쿠키는 다음과 같이 작성됩니다.

var Cookie_expiry = new Date();
Cookie_expiry.setDate(Cookie_expiry.getDate()+10e5);   
// expiry date of cookie is set to be practically infinite (~ 4000 years)
setCookie('token', 'token_value', {expires: Cookie_expiry});

쿠키를 영원히 지속할 수 있는 방법은 없다고 생각합니다만, 2100년 등, 장래에 기한이 만료되도록 설정하기만 하면 됩니다.

그러면 안 되고 어차피 안 되니까 10년 전처럼 더 큰 가치를 설정할 수 있어요.

덧붙여서, 저는 이런 요건이 있는 쿠키를 본 적이 없습니다.

확실하진 않지만 브라우저에서 쿠키가 삭제되지 않나요?쿠키와 크롬의 유효기간이 "브라우저 종료시"로 인식된 날짜를 어떻게든 종료했습니다.

할 수 없지만 유효기간을 지금 + 100년으로 설정하면 어떻게 됩니까?

언급URL : https://stackoverflow.com/questions/3290424/set-a-cookie-to-never-expire

반응형