jQuery로 쿠키를 설정 / 설정 해제하는 방법


1243

jQuery를 사용하여 쿠키를 설정 및 설정 해제하는 방법은 무엇입니까? 예를 들어 이름이 지정된 쿠키를 만들고 test값을 1?

답변:


1767

2019 년 4 월 업데이트

쿠키 읽기 / 조작에는 jQuery가 필요하지 않으므로 아래의 원래 답변을 사용하지 마십시오.

대신 https://github.com/js-cookie/js-cookie로 이동하여 jQuery에 의존하지 않는 라이브러리를 사용하십시오.

기본 예 :

// Set a cookie
Cookies.set('name', 'value');

// Read the cookie
Cookies.get('name') => // => 'value'

자세한 내용은 github의 문서를 참조하십시오.


플러그인을 참조하십시오 :

https://github.com/carhartl/jquery-cookie

그런 다음 다음을 수행 할 수 있습니다.

$.cookie("test", 1);

지우는 것:

$.removeCookie("test");

또한 쿠키에서 특정 일 수 (10 일)의 시간 초과를 설정하려면 다음을 수행하십시오.

$.cookie("test", 1, { expires : 10 });

expires 옵션을 생략하면 쿠키가 세션 쿠키가되고 브라우저가 종료 될 때 삭제됩니다.

모든 옵션을 다루려면 :

$.cookie("test", 1, {
   expires : 10,           // Expires in 10 days

   path    : '/',          // The value of the path attribute of the cookie
                           // (Default: path of page that created the cookie).

   domain  : 'jquery.com', // The value of the domain attribute of the cookie
                           // (Default: domain of page that created the cookie).

   secure  : true          // If set to true the secure attribute of the cookie
                           // will be set and the cookie transmission will
                           // require a secure protocol (defaults to false).
});

쿠키 값을 다시 읽으려면 :

var cookieValue = $.cookie("test");

쿠키가 현재 경로와 다른 경로에 생성 된 경우 경로 매개 변수를 지정할 수 있습니다.

var cookieValue = $.cookie("test", { path: '/foo' });

업데이트 (2015 년 4 월) :

아래 의견에서 언급했듯이 원래 플러그인을 작업 한 팀은 새 프로젝트 ( https://github.com/js-cookie/js-cookie )와 동일한 기능 및 일반 구문을 가진 jQuery 종속성을 제거 했습니다. jQuery 버전. 분명히 원래 플러그인은 아무데도 가지 않습니다.


1
변경 로그에서 : "$ .cookie ( 'foo', null)을 사용하여 쿠키를 삭제하기위한 $$. removeCookie ( 'foo')는 더 이상 사용되지 않습니다"
— bogdan

68
@Kazar 나는 6 시간을 보냈다. 나는 오늘 아침 문제를 마침내 깨달았다. 나는 phonegap과 함께 이것을 사용하고 있지만 사이트에서 아무런 문제없이 작동하지만 장치에서는 JSON이있는 쿠키를 검색하려고 할 때 이미 객체이므로 JSON을 시도하면 JSON입니다. JSON 구문 분석 오류가 발생합니다. "if typeof x == 'string'"으로 해결하면 JSON.parse를 수행하십시오. 그렇지 않으면 객체를 사용하십시오. 6 잘못된 시간 모든 잘못된 장소에서 오류를 찾고
— Andrei Cristian Prodan

10
쿠키를 제거 할 때 쿠키를 원래 설정 한 것과 동일한 경로로 경로를 설정해야합니다.$.removeCookie('nameofcookie', { path: '/' });
— LessQuesar

30
2015 년 이며이 답변으로 jquery-cookie 저장소에서 일주일에 2k 개 이상의 고유 적중을 받고 있습니다. 우리가 배울 수있는 몇 가지 : 1. 쿠키는 곧 죽지 않을 것입니다. 2. 사람들은 여전히 ​​"세계를 구하기위한 jquery 플러그인"을 위해 구글을 찾습니다. jQuery는 쿠키를 처리하는 데 필요하지 않으며 jquery-cookie는 js-cookie ( github.com/js-cookie/js-cookie ) 로 이름이 바뀌고 jquery 종속성은 버전 1.5.0에서 선택 사항이되었습니다. 흥미로운 것들이 많은 버전 2.0.0이있을 것입니다. 살펴보고 기여할 가치가 있습니다!
— Fagner Brack

2
@Kazar 물리적으로 이동할 계획은 없으며 여러 소스에서 해당 URL 로의 전체 트래픽이 상당히 많으며 Klaus는 "jquery-cookie"네임 스페이스의 역사적인 소유자입니다. 해당 URL이 곧 사라질까 걱정할 필요가 없습니다. 그러나 여전히 모든 사람들이 업데이트를 위해 새로운 저장소를 보도록 권장합니다.
— Fagner Brack

429

특히 쿠키를 조작하기 위해 jQuery를 사용할 필요가 없습니다.

에서 쿼크 모드 (이스케이프 문자 포함)

function createCookie(name, value, days) {
    var expires;

    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        expires = "; expires=" + date.toGMTString();
    } else {
        expires = "";
    }
    document.cookie = encodeURIComponent(name) + "=" + encodeURIComponent(value) + expires + "; path=/";
}

function readCookie(name) {
    var nameEQ = encodeURIComponent(name) + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) === ' ')
            c = c.substring(1, c.length);
        if (c.indexOf(nameEQ) === 0)
            return decodeURIComponent(c.substring(nameEQ.length, c.length));
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name, "", -1);
}

보세요


2
안녕 러스, jquery 쿠키의 좋은 점은 데이터를 탈출한다는 것입니다
— Svetoslav Marinov

2
@lordspace-쿠키 값을 각각 쓰거나 검색하기 위해 window.escape / unescape의 값을 래핑하십시오 :)
— Russ Cam

46
더 나은 쿠키 코드는 여기에서 찾을 수 있습니다 : developer.mozilla.org/en/DOM/document.cookie
— SDC

3
jQuery 쿠키 플러그인은 훨씬 간단합니다
— brauliobo

1
대신 탈출 또는 언 이스케이프의 경우에 encodeURI 또는 decodeURI 사용할 수 있습니다
— Rodislav 몰도바

143
<script type="text/javascript">
    function setCookie(key, value, expiry) {
        var expires = new Date();
        expires.setTime(expires.getTime() + (expiry * 24 * 60 * 60 * 1000));
        document.cookie = key + '=' + value + ';expires=' + expires.toUTCString();
    }

    function getCookie(key) {
        var keyValue = document.cookie.match('(^|;) ?' + key + '=([^;]*)(;|$)');
        return keyValue ? keyValue[2] : null;
    }

    function eraseCookie(key) {
        var keyValue = getCookie(key);
        setCookie(key, keyValue, '-1');
    }

</script>

쿠키를 다음과 같이 설정할 수 있습니다

setCookie('test','1','1'); //(key,value,expiry in days)

쿠키를 다음과 같이 얻을 수 있습니다

getCookie('test');

마지막으로이 쿠키를 지울 수 있습니다

eraseCookie('test');

그것이 누군가에게 도움이되기를 바랍니다 :)

편집하다:

쿠키를 모든 경로 / 페이지 / 디렉토리로 설정하려면 path 속성을 쿠키로 설정하십시오.

function setCookie(key, value, expiry) {
        var expires = new Date();
        expires.setTime(expires.getTime() + (expiry * 24 * 60 * 60 * 1000));
        document.cookie = key + '=' + value + ';path=/' + ';expires=' + expires.toUTCString();
}

고마워, vicky


1
60 * 1000 = 60 초 60 * (60 * 1000) = 60 분, 1 시간 24 * (60 * (60 * 1000)) = 1 일 24 시간 도움이 되길 바랍니다.
— Vignesh Pichamani

1
1 * 24 * 60 * * 1000 사용자 1 하루 또는 u가 365을 60
— 인 Vignesh Pichamani

1
좋은 기능 ...하지만 왜 document.ready 태그 안에 있습니까?
— Dss

1
이 같은 ASCII 범위 밖의 모든 문자에 대해 Safari 또는 IE에서 작동하지 않을 é, 北등 또한, 이것은 쿠키 이름이나 쿠키 값에 허용되지 않는 일부 특수 문자에 대한 작업에 갈 수 없습니다. 다음 참조를 권장합니다 : tools.ietf.org/html/rfc6265
— Fagner Brack


13

여기 내가 사용하는 전역 모듈이 있습니다-

var Cookie = {   

   Create: function (name, value, days) {

       var expires = "";

        if (days) {
           var date = new Date();
           date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
           expires = "; expires=" + date.toGMTString();
       }

       document.cookie = name + "=" + value + expires + "; path=/";
   },

   Read: function (name) {

        var nameEQ = name + "=";
        var ca = document.cookie.split(";");

        for (var i = 0; i < ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0) == " ") c = c.substring(1, c.length);
            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
        }

        return null;
    },

    Erase: function (name) {

        Cookie.create(name, "", -1);
    }

};

10

다음과 같이하지 마십시오 :

var a = $.cookie("cart").split(",");

그런 다음 쿠키가 존재하지 않으면 디버거는 ".cookie not a function"과 같은 도움이되지 않는 메시지를 반환합니다.

항상 먼저 선언 한 다음 null을 확인한 후 분할을 수행하십시오. 이처럼 :

var a = $.cookie("cart");
if (a != null) {
    var aa = a.split(",");

샘플 코드가 완료되지 않았습니다. 하나만 }누락되었거나 여러 줄의 코드가 누락 되었습니까?
— Peter Mortensen

단 하나도 없어졌지만, 스플릿으로하고 싶은 일을 계속하려면 더 많은 코드 줄을 추가해야합니다.
— user890332

8

JavaScript로 쿠키를 설정하는 방법은 다음과 같습니다.

아래 코드는 https://www.w3schools.com/js/js_cookies.asp 에서 가져온 것입니다

function setCookie(cname, cvalue, exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays*24*60*60*1000));
    var expires = "expires="+ d.toUTCString();
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

이제 아래 함수로 쿠키를 얻을 수 있습니다.

function getCookie(cname) {
    var name = cname + "=";
    var decodedCookie = decodeURIComponent(document.cookie);
    var ca = decodedCookie.split(';');
    for(var i = 0; i <ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') {
            c = c.substring(1);
        }
        if (c.indexOf(name) == 0) {
            return c.substring(name.length, c.length);
        }
    }
    return "";
}

마지막으로 쿠키를 확인하는 방법입니다.

function checkCookie() {
    var username = getCookie("username");
    if (username != "") {
        alert("Welcome again " + username);
    } else {
        username = prompt("Please enter your name:", "");
        if (username != "" && username != null) {
            setCookie("username", username, 365);
        }
    }
}

쿠키를 삭제하려면 expires 매개 변수를 전달 된 날짜로 설정하십시오.

document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";

7

브라우저에서 쿠키를 설정하는 간단한 예 :

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>jquery.cookie Test Suite</title>

        <script src="jquery-1.9.0.min.js"></script>
        <script src="jquery.cookie.js"></script>
        <script src="JSON-js-master/json.js"></script>
        <script src="JSON-js-master/json_parse.js"></script>
        <script>
            $(function() {

               if ($.cookie('cookieStore')) {
                    var data=JSON.parse($.cookie("cookieStore"));
                    $('#name').text(data[0]);
                    $('#address').text(data[1]);
              }

              $('#submit').on('click', function(){

                    var storeData = new Array();
                    storeData[0] = $('#inputName').val();
                    storeData[1] = $('#inputAddress').val();

                    $.cookie("cookieStore", JSON.stringify(storeData));
                    var data=JSON.parse($.cookie("cookieStore"));
                    $('#name').text(data[0]);
                    $('#address').text(data[1]);
              });
            });

       </script>
    </head>
    <body>
            <label for="inputName">Name</label>
            <br /> 
            <input type="text" id="inputName">
            <br />      
            <br /> 
            <label for="inputAddress">Address</label>
            <br /> 
            <input type="text" id="inputAddress">
            <br />      
            <br />   
            <input type="submit" id="submit" value="Submit" />
            <hr>    
            <p id="name"></p>
            <br />      
            <p id="address"></p>
            <br />
            <hr>  
     </body>
</html>

간단히 쿠키를 복사 / 붙여 넣기하고이 코드를 사용하여 쿠키를 설정하십시오.


1
참고로, 브라우저는 기본적으로 파일 이름에 따라 리소스를 캐시합니다. 이 예제에서는 jquery-1.9.0.min.js파일 이름이로 업데이트 될 때 모든 사람이 다시로드됩니다 jquery-1.9.1.min.js. 그렇지 않으면 브라우저가 업데이트 된 컨텐츠를 확인하기 위해 서버에 전혀 요청하지 않습니다. jquery.cookie.js파일 이름을 변경하지 않고 코드를 업데이트하면 이미 jquery.cookie.js리소스를 캐시 한 브라우저에서 다시로드되지 않을 수 있습니다 .
— Fagner Brack

웹 사이트를 작성하고이를 복사 / 붙여 넣기 jquery.cookie.js하는 경우 파일 이름을 변경하지 않고 버전 을 업데이트하면 서버가 E- 태그를 사용하여 캐싱을 처리하지 않는 한 버전 이 업데이트 되지 않습니다.
— Fagner Brack

if ($ .cookie ( 'cookieStore')) {var data = JSON.parse ($. cookie ( "cookieStore")); // 다른 페이지에 페이지를로드 할 수없는 경우 $ ( '# name'). text (data [0]); $ ( '# address'). text (data [1]); }
— Mohammad Javad

5

여기 에서 Mozilla 웹 사이트의 라이브러리를 사용할 수 있습니다

이와 같은 쿠키를 설정하고 얻을 수 있습니다

docCookies.setItem(name, value);
docCookies.getItem(name);

3

Fresher가 우리에게 좋은 길을 주었다고 생각하지만 실수가 있습니다.

    <script type="text/javascript">
        function setCookie(key, value) {
            var expires = new Date();
            expires.setTime(expires.getTime() + (value * 24 * 60 * 60 * 1000));
            document.cookie = key + '=' + value + ';expires=' + expires.toUTCString();
        }

        function getCookie(key) {
            var keyValue = document.cookie.match('(^|;) ?' + key + '=([^;]*)(;|$)');
            return keyValue ? keyValue[2] : null;
        }
   </script>

getTime () 근처에 "value"를 추가해야합니다. 그렇지 않으면 쿠키가 즉시 만료됩니다 :)


2
"value"는 문자열 일 수 있습니다. 이 질문에서 그는 예를 들어 1을 사용하고 있습니다. 쿠키가 만료되기 전의 길이가 아닌 키의 값이어야합니다. 값이 "foo"로 전달되면 버전이 중단됩니다.
— Peter

1

나는 생각했다 Vignesh Pichamani 의 답변이 가장 간단하고 깨끗 . 만기일 수를 설정하는 기능을 추가하기 만하면됩니다.

편집 : 일 번호가 설정되지 않은 경우 '만료되지 않음'옵션도 추가되었습니다.

        function setCookie(key, value, days) {
            var expires = new Date();
            if (days) {
                expires.setTime(expires.getTime() + (days * 24 * 60 * 60 * 1000));
                document.cookie = key + '=' + value + ';expires=' + expires.toUTCString();
            } else {
                document.cookie = key + '=' + value + ';expires=Fri, 30 Dec 9999 23:59:59 GMT;';
            }
        }

        function getCookie(key) {
            var keyValue = document.cookie.match('(^|;) ?' + key + '=([^;]*)(;|$)');
            return keyValue ? keyValue[2] : null;
        }

쿠키를 설정하십시오.

setCookie('myData', 1, 30); // myData=1 for 30 days. 
setCookie('myData', 1); // myData=1 'forever' (until the year 9999) 

1

나는 많은 훌륭한 답변이 있다는 것을 알고 있습니다. 종종 쿠키 만 읽을 필요가 있으며 추가 라이브러리를로드하거나 함수를 정의하여 오버 헤드를 생성하고 싶지 않습니다.

다음은 한 줄의 자바 스크립트에서 쿠키를 읽는 방법 입니다. Guilherme Rodrigues의 블로그 기사 에서 답을 찾았습니다 .

('; '+document.cookie).split('; '+key+'=').pop().split(';').shift()

이 쿠키는 key멋지고 깨끗하며 단순합니다.


-1
$.cookie("test", 1); //set cookie
$.cookie("test"); //get cookie
$.cookie('test', null); //delete cookie
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.