programing

만료일이 없는 자바스크립트 쿠키

closeapi 2023. 9. 23. 22:44
반응형

만료일이 없는 자바스크립트 쿠키

기한이 만료되지 않는 쿠키를 설치하고 싶습니다.그게 가능하겠습니까?

 document.cookie = "name=value; expires=date; path=path;domain=domain; secure";

날짜를 정말 크게 만들고 싶지는 않은데, 쿠키에 만료되지 말라는 유효기간 파라미터 값이 있는지 궁금합니다.

감사해요.

아뇨, 그럴 순 없어요가장 좋은 '방법'은 유효기간을 2100년 정도로 만드는 것입니다.

편집

2022년 8월 기준, 크롬 쿠키는 400일 이후에만 만료되도록 설정할 수 있습니다.

원하는 것에 대한 구문이 없습니다.설정이 만료되지 않으면 세션이 끝날 때 쿠키가 만료됩니다.유일한 옵션은 임의로 큰 값을 선택하는 것입니다.일부 브라우저는 2038년 이후의 날짜(유닉스 에포크 시간이 32비트 int를 초과하는 경우)에 문제가 있습니다.

Mozilla 문서에서 예제와 같이 수행할 수 있습니다.

 document.cookie = "someCookieName=true; expires=Fri, 31 Dec 9999 23:59:59 GMT";

추신

물론 인류가 10000년의 첫번째 1분에 여전히 당신의 코드를 사용한다면 문제가 생길 것입니다 :)

쿠키 사양에 따라 모든 쿠키가 만료됩니다. 설정할 수 있는 최대값은

 2^31 - 1 = 2147483647 = 2038-01-19 04:14:07

그래서 최대 쿠키 수명은

$.cookie('subscripted_24', true, { expires: 2147483647 });

사용자가 웹 사이트를 다시 방문할 때마다 쿠키를 한 달 정도의 만료 날짜로 설정하고 쿠키를 다시 할당할 수 있습니다.

만료 날짜를 설정하지 않으면 쿠키는 사용자의 세션이 끝날 때 만료됩니다.unix epoch time이 32비트 정수를 지나 확장되기 직전 날짜를 사용하는 것을 추천합니다.그것을 쿠키에 넣으려면 당신이 사용할 것입니다.document.cookie = "randomCookie=true; expires=Tue, 19 Jan 2038 03:14:07 UTC;, 라고 가정하고randomCookie당신이 설정하고 있는 쿠키와true그것은 각각의 가치입니다.

당신은 안 돼요영원한 쿠키를 설정하는 데 사용할 정확한 코드는 없지만 오래된 트릭이면 충분합니다.current time + 10 years.

그 이후의 날짜들에 대해서만 메모를 해 두시오.January 2038쿠키(32비트 int)는 즉시 삭제됩니다.가까운 미래에 그것이 고쳐지기를 바라는 기적을 바랍니다.64비트 int의 경우, 년 단위2110안전할 겁니다시간이 지남에 따라 소프트웨어와 하드웨어는 변화할 것이고, 더 오래된 것들(지금 우리가 가지고 있는 것들)에 결코 적응하지 못할 수도 있기 때문에 미래를 대비해야 합니다.

2038년 문제 참조

앞서 말한 것처럼 만료 날짜를 설정하지 않으면 세션이 끝날 때 브라우저에서 삭제되기 때문에 그 반대의 결과를 얻을 수 있습니다.그래서 유통기한을 정해야 지속이 가능합니다.

그러나 9월 2022부터 Chrome은 당신의 쿠키 최대 용량을 400일로 제한합니다. (https://chromestatus.com/feature/4887741241229312) :

When cookies are set with an explicit Expires/Max-Age attribute the value will now be capped to no more than 400 days in the future. Previously, there was no limit and cookies could expire as much as multiple millennia in the future.

Motivation

The draft of rfc6265bis now contains an upper limit for Cookie Expires/Max-Age attributes. As written:
"The user agent MUST limit the maximum value of the [Max-Age/Expiration] attribute. The limit MUST NOT be greater than 400 days (34560000 seconds) in duration. The RECOMMENDED limit is 400 days in duration, but the user agent MAY adjust the limit to be less. [Max-Age/Expiration] attributes that are greater than the limit MUST be reduced to the limit."

400 days was chosen as a round number close to 13 months in duration. 13 months was chosen to ensure that sites one visits roughly once a year (e.g., picking health insurance benefits) will continue to work.

자, 400일이 최대 수명입니다.

클라이언트 측에서만 데이터를 읽으려는 경우 로컬 저장소를 사용할 수 있습니다.브라우저의 캐시가 지워질 때만 삭제됩니다.

Javascript Local Storage(로컬 스토리지)를 사용

<!DOCTYPE html>
<html>
<body>

<h1>The Window Object</h1>
<h2>The localStorage Property</h2>

<p>Saved name is:</p>
<p id="demo"></p>

<script>
// Set Item
localStorage.setItem("lastname", "Smith");
// Retrieve
document.getElementById("demo").innerHTML = 
localStorage.getItem("lastname");
</script>

</body>
</html>

참고: localStorage 개체는 만료 날짜가 없는 데이터를 저장합니다.브라우저가 닫혔을 때 데이터는 삭제되지 않으며 이후 세션에서 사용할 수 있습니다.

웹 브라우저에서 쿠키를 수동으로 삭제하면 모든 로컬 스토리지 데이터도 삭제됩니다.

쿠키와 달리 로컬 스토리지는 PHP 코드 스크립트에서 액세스할 수 없습니다.서버 측에서 확인이 필요한 로그인 자격 증명이 필요한 경우에는 권장되지 않습니다.

vistor가 사이트로 돌아올 때마다 쿠키 만료 날짜를 새로 고칠 수 있고 새로 고쳐야 합니다.

쿠키를 이전과 동일한 값으로 다시 설정하기만 하면 되지만 새로운 유통기한이 지나면 더 나중에 설정할 수 있습니다.쿠키에서 값을 초기화할 때마다 이 작업을 수행합니다.그래야 일반 방문객들이 설정을 잃지 않습니다.

언급URL : https://stackoverflow.com/questions/532635/javascript-cookie-with-no-expiration-date

반응형