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


187

쿠키 설정 에 대한 PHP 문서를 보면 쿠키 의 만료 날짜를 설정할 수 있습니다. 브라우저 세션이 끝날 때 또는 나중에 언젠가 쿠키가 만료되도록 설정할 수 있지만 쿠키가 만료되지 않도록 설정하는 방법은 보이지 않습니다. 이것이 가능하며 어떻게 달성됩니까?


13
@ sAc : 왜 이것이 나쁜 것입니까?
brainimus

1
쿠키 사양에 따라 가능하지 않기 때문입니다. 만료되지 않도록 설정할 수 없습니다.
Sarfraz

2
당신은 사용할 수 있습니다 $cookie->setMaxAge(2147483647);2080보다 늦게과 함께, 32 비트 및 64 비트 모두에서 작동하는 github.com/delight-im/PHP-Cookie
까악 까악

답변:


259

모든 쿠키는 쿠키 사양에 따라 만료 되므로 이는 PHP 제한이 아닙니다.

먼 미래 날짜를 사용하십시오. 예를 들어, 10 년 후에 만료되는 쿠키를 설정하십시오.

setcookie(
  "CookieName",
  "CookieValue",
  time() + (10 * 365 * 24 * 60 * 60)
);

32 비트 PHP에서 2038 년 이후 의 날짜를 설정 하면 숫자가 줄 바꿈되어 쿠키가 즉시 만료됩니다.


8
동의했다! 그리고 20 년 후에는 웹 사이트가 훨씬 앞서 나 쿠키가 사용되지 않을 것이라고 생각합니다. @brainimus : 모든 사람들이 언급 한 구식 시스템을 사용하십시오.
jolt

13
2018이 올 때 64 비트 PHP를 사용하지 않으면 32 비트 정수를 감싸고 0에 가까운 시간에 클라이언트로 전송됩니다. (이것은 현재 PHP에서 25 년 동안 쿠키가 발생하고 있습니다.)
Riking

83
2018 년 (지금 5 년만에)이 의견에 다시 돌아와서 2038 년에 20 년 후 다시 Y2018 업그레이드를 구현하기 위해 모든 사람들이 출렁이는 모습을 보게되면 재미있을 것입니다. 292,277,026,596 년 12 월 4 일 일요일에 292 억 년 동안 문제가되지 않습니다. 내가 죽기 전에 특이점에 도달하지 않으면 나는 그 점에 대해 걱정할 필요가 없다고 생각합니다.
shaunhusain

58
2037 년 말에 현재 사용하고있는 컴퓨터와 동일한 컴퓨터를 사용하고 있다면 슬퍼 할 것입니다!
Abela

22
나는 2018 년에 이것을 읽고 잠시 당황하고 나서 내가 괜찮다는 것을 깨달았습니다.
Interloper

80

최대 값 : 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


39

미래의 절대 시간을 설정하십시오 .

setcookie("CookieName", "CookieValue", 2147483647);

허용 된 답변에서 권장하는 현재 시간을 기준으로 계산하는 것보다 절대 시간을 사용하는 것이 좋습니다.

32 비트 시스템과 호환되는 최대 값은 다음과 같습니다.

2147483647 = 2^31 = ~year 2038

22
20 억은 기억하기 쉽지만 $ forever의 이상적인 숫자는 2038 년 1 월에 해당하는 2 ^ 31-1 = 2147483647입니다. @John이 말한 것처럼 2038 버그의 정수 오버플로를 피하는 것이 최대 값입니다.
David

13

내 특권으로 인해 첫 번째 게시물에 대한 의견을 작성하지 못하므로 여기로 이동해야합니다.

현재 날짜로부터 20 년 전에 설정 한 경우 위의 정답으로 제안되는 2038 유닉스 버그 를 고려해야합니다 .

2018 년 1 월 19 일 + (20 년) 쿠키는 브라우저 또는 실행중인 버전에 따라 2038 문제를 일으킬 수 있습니다.


7

끝없는 루프를 말할 수는 없으며 쿠키는 현재 날짜 + 1로 만료되므로 항상 내일이므로 만료 예정 날짜에 도달하지 않습니까? 약간 과잉이지만 말만합니다.


1
사실, 그는 요점이 있습니다. 3 개월의 적절한 '비 활동 기간'을 사용한 다음 각 요청마다 해당 기간으로 쿠키를 새로 고치는 것이 의미가 있습니다.
Stijn de Witt

@StijndeWitt 또는 불과 10 년. 사용자가 10 년 이내에 방문하면 업데이트하십시오.
Jez

5

이것이 가능하지는 않지만 Google과 비슷한 작업을 수행하고 쿠키를 2038 년 1 월 17 일 또는 그와 동일하게 만료되도록 설정할 수 있습니다.

실제로는 쿠키를 사용하는 대부분의 머신보다 오래 사용해야하는 10 년 또는 60 * 60 * 24 * 365 * 10의 쿠키를 설정하는 것이 좋습니다.


2
이는 2028 년 초까지 작동하며,이 시점에서 값이 오버플로되고 쿠키가 작동을 멈 춥니 다. 대신 절대 값을 사용하는 것이 좋습니다.
davidjbullock 17 년

1
그의 코드가 2028 년에도 구식 컴퓨터에서 계속 실행될 것이라고 가정하면 ... 어떻게 든 모든 사람이 고정 날짜를 업데이트하는 것을 잊어 버릴까 걱정됩니다 ... 소프트웨어는 하드웨어보다 오래 사용하는 경향이 있습니다.
Stijn de Witt

4

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

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

최대 저장 기간이 0 인 쿠키처럼 지워 지므로 세션 저장소를 사용하지 마십시오.


캔 트는 서버 측 데이터를 읽을 때 localStorage를 고려합니다.
WhiteHorse

1

절대영원히은 내가 인해 삶의 불확실성에 사용하지 않는 것이 두 단어 없습니다.

1 January 1970부호있는 32-bit정수를 사용하여 저장할 수있는 최신 시간 은 03:14:07 on Tuesday, 19 January 2038( 231-1 = 2,147,483,6471 January 1970) 입니다. 이 제한을 2038 년 문제라고합니다.

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

0

쿠키를 영원히 지속시킬 수있는 방법이 없다고 생각하지만 2100 년과 같이 앞으로 쿠키가 만료되도록 설정하면됩니다.


0

그렇게하지 말아야하며 어쨌든 불가능합니다. 원하는 경우 10 년 전과 같이 더 큰 값을 설정할 수 있습니다.

그건 그렇고, 나는 그런 요구 사항을 가진 쿠키를 본 적이 없습니다 :)


여러 항목을 막는 데 너무 귀찮게하지 않으려는 고유 응답 설문에 대한 쿠키는이 요구 사항이 있다고 가정합니다.
랜덤 코끼리

컴퓨터 쿠키가 아닌 @sarfraz를보십시오.

-1

잘 모르겠지만 브라우저를 닫을 때 쿠키가 삭제되지 않습니까? 나는 어떻게 든 쿠키가 만료되지 않았고 크롬은 만료 된 날짜를 "브라우저가 닫을 때"로 인식했습니다 ...


4
쿠키에 만료 날짜를 설정 한 경우 반드시 브라우저를 닫았다가 다시 연 후에도 쿠키가 유지됩니다. 만료를 설정하지 않으면 브라우저를 닫을 때 기본 동작이 삭제됩니다.
HoLyVieR

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.