쿠키를 만료되지 않도록 설정
쿠키 설정에 관한 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.
캐시가 나타낼 수 있는 최대 양의 정수보다 큰 값을 수신한 경우 또는 캐시의 경과시간 계산 중 하나가 오버플로우한 경우 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
'programing' 카테고리의 다른 글
| SSH 경유로 Eclipse를 사용한 리모트 프로젝트 작업 (0) | 2022.09.21 |
|---|---|
| PHP에는 구조 데이터 타입이 있습니까? (0) | 2022.09.21 |
| vuetify에서 if on height prople 사용 (0) | 2022.09.21 |
| MySQL 열 정의를 변경하는 방법 (0) | 2022.09.21 |
| "optimize table tablename" 실행 후 테이블 크기가 증가했습니다. (0) | 2022.09.21 |