쿠키에서 값을 생성하고 읽는 방법은 무엇입니까?


274

JavaScript 쿠키에서 값을 생성하고 읽는 방법은 무엇입니까?


15
Quirks 모드에는 JavaScript 및 쿠키에 대한
Quentin

FWIW, js-cookie 는이를 처리하기위한 매우 좋은 API를 제공합니다.
Fagner Brack 2016

JavaScript Cookie 에서이 안내서를 확인할 수 있습니다 .
Shubham Kumar

Web Storage API 가 일부 상황에서 쿠키를 대체 할 수있는 좋은 방법 임을 잊지 마십시오 .
MattBianco

답변:


234

쿠키 생성 및 검색에 사용할 수있는 기능은 다음과 같습니다.

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 = name + "=" + value + expires + "; path=/";
}

function getCookie(c_name) {
    if (document.cookie.length > 0) {
        c_start = document.cookie.indexOf(c_name + "=");
        if (c_start != -1) {
            c_start = c_start + c_name.length + 1;
            c_end = document.cookie.indexOf(";", c_start);
            if (c_end == -1) {
                c_end = document.cookie.length;
            }
            return unescape(document.cookie.substring(c_start, c_end));
        }
    }
    return "";
}

23
쿠키 값에 인코딩 / 디코딩이 잘되지 않는 것이 포함되어 있으면 작동하지 않습니다. w3schools에 있는 사람 beautifly 일하는 것처럼 보인다
Richard Rout

13
이 간단한 Mozilla 래퍼 도 명시 적으로 유니 코드를 지원합니다
Brad Parks

4
@BradParks GPL에 출시되어 너무 나쁩니다.
jahu

1
쿠키에 값이 없으면 IE는 쿠키 이름 뒤에 등호 ( = )를 추가하지 않으므로 IE8 또는 9에서는 작동하지 않습니다 . 우리가하는 일은 indexOf ( "=") ==-1 인지 확인하고, 그렇다면 쿠키 전체 쿠키를 쿠키 이름으로 사용하는 것입니다.
Mohoch

@jahu 그리고 나는 또한 그것이 공개 도메인에 있다고 말하고 싶습니다 : developer.mozilla.org/en-US/docs/MDN/…
Chronial

51

최소한의 모든 기능을 갖춘 ES6 접근 방식 :

const setCookie = (name, value, days = 7, path = '/') => {
  const expires = new Date(Date.now() + days * 864e5).toUTCString()
  document.cookie = name + '=' + encodeURIComponent(value) + '; expires=' + expires + '; path=' + path
}

const getCookie = (name) => {
  return document.cookie.split('; ').reduce((r, v) => {
    const parts = v.split('=')
    return parts[0] === name ? decodeURIComponent(parts[1]) : r
  }, '')
}

const deleteCookie = (name, path) => {
  setCookie(name, '', -1, path)
}

2
toGMTString()더 이상 사용되지 않습니다 toUTCString(). 대신 사용하십시오.
Thanh Nguyen

트윗 담아 가기 업데이트
artnikpro

1
때때로 쿠키 값 자체에 =부호 가 포함될 수 있습니다 . 이 경우 함수 getCookie는 예기치 않은 결과를 생성합니다. 이를 피하기 위해 내부에 다음 화살표 기능 바디를 사용하십시오.const [n, ...val] = v.split('='); return n === name ? decodeURIComponent(val.join('=')) : r
Dmitriy Zhura

만료 날짜를 설정하지 않은 상태로 두는 것이 좋을 것입니다. 이렇게하면 브라우저 종료시 쿠키가 자동으로 삭제됩니다.
xji

4
864e5 = 86400000 = 1000*60*60*2424 시간의 밀리 초 수를 나타냅니다.
Henrikh Kantuni

41

jQuery 쿠키

또는 일반 자바 스크립트 :

function setCookie(c_name,value,exdays)
{
   var exdate=new Date();
   exdate.setDate(exdate.getDate() + exdays);
   var c_value=escape(value) + ((exdays==null) ? "" : ("; expires="+exdate.toUTCString()));
   document.cookie=c_name + "=" + c_value;
}

function getCookie(c_name)
{
   var i,x,y,ARRcookies=document.cookie.split(";");
   for (i=0; i<ARRcookies.length; i++)
   {
      x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
      y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
      x=x.replace(/^\s+|\s+$/g,"");
      if (x==c_name)
      {
        return unescape(y);
      }
   }
}

1
JQuery 쿠키를 언급했기 때문에 주로 이것을 표시하고 있습니다. 나는 그것을 추천합니다. 코드는 매우 작으며 JQuery를 이미 사용하고 있다면 올바른 것입니다.
w0rp

17

Mozilla는 쿠키 를 사용하고 사용하는 예제 와 함께 완전한 유니 코드를 지원하는 쿠키를 읽고 쓰는 간단한 프레임 워크를 제공 합니다.

페이지에 포함되면 쿠키를 설정할 수 있습니다.

docCookies.setItem(name, value);

쿠키를 읽으십시오 :

docCookies.getItem(name);

또는 쿠키를 삭제하십시오.

docCookies.removeItem(name);

예를 들면 다음과 같습니다.

// sets a cookie called 'myCookie' with value 'Chocolate Chip'
docCookies.setItem('myCookie', 'Chocolate Chip');

// reads the value of a cookie called 'myCookie' and assigns to variable
var myCookie = docCookies.getItem('myCookie');

// removes the cookie called 'myCookie'
docCookies.removeItem('myCookie');

Mozilla의 document.cookie 페이지 에서 더 많은 예제와 세부 사항을 참조하십시오 .

이 간단한 js 파일의 버전은 github에 있습니다.


2
MDN에서 제공되는 쿠키 라이브러리는 LGPL이 아닌 GPL로 배포됩니다.
모든 근로자가 필수적

어떤 자바 스크립트 파일을 가져와야합니까? :( 그것을 찾을 수 없습니다
AlikElzin-kilaka

이 페이지의 "라이브러리"섹션을 참조하십시오. developer.mozilla.org/en-US/docs/Web/API/document/…- 파일에 저장 한 후 기존 js 파일에 붙여 넣기 당신은 그것을 사용하고 싶습니다.
Brendan Nee

독립형 자바 스크립트 파일이 없습니까? 따라서 실제 라이브러리가 아닌 코드 스 니펫입니다.
AlikElzin-kilaka

대단한 입력! "라이브러리"는 ~ 80 줄의 단일 .js 파일입니다. 이 파일입니다 (GitHub) : github.com/madmurphy/cookies.js/blob/master/cookies.js
Philipp

8

get ()에 대한 정규식을 사용하는 ES7. MDN 기반

const Cookie =
    { get: name => {
        let c = document.cookie.match(`(?:(?:^|.*; *)${name} *= *([^;]*).*$)|^.*$`)[1]
        if (c) return decodeURIComponent(c)
        }
    , set: (name, value, opts = {}) => { 
        if (opts.days) { 
            opts['max-age'] = opts.days * 60 * 60 * 24; 
            delete opts.days 
            }
        opts = Object.entries(opts).reduce((str, [k, v]) => `${str}; ${k}=${v}`, '')
        document.cookie = name + '=' + encodeURIComponent(value) + opts
        }
    , delete: (name, opts) => Cookie.set(name, '', {'max-age': -1, ...opts}) 
    // path & domain must match cookie being deleted 
    }

Cookie.set('user', 'Jim', {path: '/', days: 10}) 
// Set the path to top level (instead of page) and expiration to 10 days (instead of session)

사용법-Cookie.get (name, value [, options]) :
옵션은 모든 표준 쿠키 옵션을 지원하고 "일"을 추가합니다.

  • path : '/'-절대 경로입니다. 기본값 : 현재 문서 위치
  • domain : 'sub.example.com'-점으로 시작할 수 없습니다. 기본값 : 하위 도메인이없는 현재 호스트
  • secure : true-https를 통해서만 쿠키를 제공합니다. 기본값 : false
  • days : 쿠키가 만료 될 때까지 2 일 기본값 : 세션 종료
    만료 설정의 다른 방법 :
    • 만료 : 'Sun, 18 Feb 2018 16:23:42 GMT'-GMT 문자열로 만료 날짜.
      현재 날짜는 new Date (Date.now ()). toUTCString ()으로 얻을 수 있습니다.
    • 'max-age' : 30-일과 동일하지만 일 대신 초 단위입니다.

다른 답변은 이전 IE 버전을 지원하기 위해 "max-age"대신 "expires"를 사용합니다. 이 방법에는 ES7이 필요하므로 IE7은 어쨌든 나오지 않습니다 (이것은별로 중요하지 않습니다).

참고 : "="및 "{:}"과 같은 재미있는 문자는 쿠키 값으로 지원되며 정규 표현식은 앞뒤 공백을 처리합니다 (다른 라이브러리에서).
객체를 저장하려면 JSON.stringify 및 JSON.parse를 사용하여 전후에 인코딩하거나 위의 내용을 편집하거나 다른 방법을 추가하십시오. 예 :

Cookie.getJSON = name => JSON.parse(Cookie.get(name))
Cookie.setJSON = (name, value, opts) => Cookie.set(name, JSON.stringify(value), opts);

downvoters가 내 방법의 문제점을 친절하게 설명 할 수 있습니까?
SamGoody

1
1. 더 짧고 IMO 유지 관리가 더 쉽습니다. 2.보다 완전하다 (안전하고 논쟁적인 순서, 최대 연령을 받아들이는 유일한 해답이다). 3. 더 많은 표준 기본값 (대부분의 답변과 달리 경로 등의 기본값은 표준으로 설정 됨). 4. 모범 사례 (MDN에 따르면 정규식은 값을 추출하는 가장 신뢰할 수있는 방법입니다). 5. Futureprook (더 많은 옵션이 쿠키에 추가되면 유지됩니다). 6. 하나의 객체가 여러 함수보다 적은 코드를 오염시킵니다. 7. 더 많은 메소드를 얻고, 설정하고, 삭제하고 쉽게 추가 할 수 있습니다. 8. ES7 (맛있는 유행어).
SamGoody

7

{foo : 'bar'}와 같은 객체를 저장 해야하는 사람들을 위해 편집 한 @KevinBurke의 답변 버전을 공유합니다. JSON.stringify와 JSON.parse를 추가했습니다.

cookie = {

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

    get : function(name){
        var nameEQ = name + "=",
            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  JSON.parse(c.substring(nameEQ.length,c.length));
        }

        return null;
    }

}

이제 다음과 같은 작업을 수행 할 수 있습니다.

cookie.set('cookie_key', {foo: 'bar'}, 30);

cookie.get('cookie_key'); // {foo: 'bar'}

cookie.set('cookie_key', 'baz', 30);

cookie.get('cookie_key'); // 'baz'

5

이 스레드의 수락 된 답변을 이미 여러 번 사용했습니다. 간단하고 사용하기 쉬운 훌륭한 코드입니다. 그러나 나는 일반적으로 babel 과 ES6 및 모듈을 사용하므로 나와 같은 경우 ES6으로 더 빨리 개발하기 위해 복사하는 코드가 있습니다.

ES6에서 모듈로 다시 작성된 허용 된 답변 :

export const createCookie = ({name, value, days}) => {
  let expires;
  if (days) {
    let date = new Date();
    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
    expires = '; expires=' + date.toGMTString();
  } else {
    expires = '';
  }
  document.cookie = name + '=' + value + expires + '; path=/';
};

export const getCookie = ({name}) => {
  if (document.cookie.length > 0) {
    let c_start = document.cookie.indexOf(name + '=');
    if (c_start !== -1) {
      c_start = c_start + name.length + 1;
      let c_end = document.cookie.indexOf(';', c_start);
      if (c_end === -1) {
        c_end = document.cookie.length;
      }
      return unescape(document.cookie.substring(c_start, c_end));
    }
  }
  return '';
};

그리고 나서 당신은 단순히 어떤 모듈로도 가져올 수 있습니다 (물론 경로는 다를 수 있습니다) :

import {createCookie, getCookie} from './../helpers/Cookie';

5

다음 은 JavaScript에서 쿠키를 가져오고 설정하고 삭제 하는 코드 입니다.

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

function setCookie(name, value, expirydays) {
 var d = new Date();
 d.setTime(d.getTime() + (expirydays*24*60*60*1000));
 var expires = "expires="+ d.toUTCString();
 document.cookie = name + "=" + value + "; " + expires;
}

function deleteCookie(name){
  setCookie(name,"",-1);
}

출처 : http://mycodingtricks.com/snippets/javascript/javascript-cookies/


2

이 개체를 사용합니다. 값은 인코딩되므로 서버 측에서 읽거나 쓸 때 고려해야합니다.

cookie = (function() {

/**
 * Sets a cookie value. seconds parameter is optional
 */
var set = function(name, value, seconds) {
    var expires = seconds ? '; expires=' + new Date(new Date().getTime() + seconds * 1000).toGMTString() : '';
    document.cookie = name + '=' + encodeURIComponent(value) + expires + '; path=/';
};

var map = function() {
    var map = {};
    var kvs = document.cookie.split('; ');
    for (var i = 0; i < kvs.length; i++) {
        var kv = kvs[i].split('=');
        map[kv[0]] = decodeURIComponent(kv[1]);
    }
    return map;
};

var get = function(name) {
    return map()[name];
};

var remove = function(name) {
    set(name, '', -1);
};

return {
    set: set,
    get: get,
    remove: remove,
    map: map
};

})();

0

ES6에서 쿠키를 읽는 간단한 방법.

function getCookies() {
    var cookies = {};
    for (let cookie of document.cookie.split('; ')) {
        let [name, value] = cookie.split("=");
        cookies[name] = decodeURIComponent(value);
    }
    console.dir(cookies);
}

0

성공하기 위해 js-cookie 를 사용했습니다.

<script src="/path/to/js.cookie.js"></script>
<script>
  Cookies.set('foo', 'bar');
  Cookies.get('foo');
</script>

0

쿠키 가져 오기 / 설정 / 제거에 쿠키 ES 모듈 을 사용할 수 있습니다 .

용법:

헤드 태그에 다음 코드를 포함하십시오.

<script src="https://raw.githack.com/anhr/cookieNodeJS/master/build/cookie.js"></script>

또는

<script src="https://raw.githack.com/anhr/cookieNodeJS/master/build/cookie.min.js"></script>

이제 웹 페이지에 사용자 정보를 저장하기 위해 window.cookie를 사용할 수 있습니다.

cookie.isEnabled ()

웹 브라우저에서 쿠키가 활성화되어 있습니까?

returns {boolean} true if cookie enabled.

if ( cookie.isEnabled() )
    console.log('cookie is enabled on your browser');
else
    console.error('cookie is disabled on your browser');

cookie.set (이름, 값)

쿠키를 설정하십시오.

name: cookie name.
value: cookie value.

cookie.set('age', 25);

cookie.get (name [, defaultValue]);

쿠키를 얻으십시오.

name: cookie name.
defaultValue: cookie default value. Default is undefined.
returns cookie value or defaultValue if cookie was not found
var age = cookie.get('age', 25);

cookie.remove (이름);

쿠키를 제거하십시오.

name: cookie name.
cookie.remove( 'age' );

사용 예


-1

readCookie의 개선 된 버전 :

function readCookie( name )
{
    var cookieParts = document.cookie.split( ';' )
    ,   i           = 0
    ,   part
    ,   part_data
    ,   value
    ;

    while( part = cookieParts[ i++ ] )
    {
        part_data = part.split( '=' );

        if ( part_data.shift().replace(/\s/, '' ) === name )
        {
            value = part_data.shift();
            break;
        }

    }
    return value;
}

쿠키 값을 찾아서 그 값을 반환하자마자 중단됩니다. 제 생각에는 이중 분할로 매우 우아합니다.

if 조건에 대한 교체는 공백 트림으로 올바르게 일치하는지 확인합니다.


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

function getCookie(cname) {
    var name = cname + "=";
    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);
        if (c.indexOf(name) == 0) {
            return c.substring(name.length, c.length);
        }
    }
    return "";
}

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

-1

간단한 cookieUtils를 작성했습니다. 쿠키를 만들고 쿠키를 읽고 쿠키를 삭제하는 세 가지 기능이 있습니다.

var CookieUtils = {
    createCookie: function (name, value, expireTime) {
        expireTime = !!expireTime ? expireTime : (15 * 60 * 1000); // Default 15 min
        var date = new Date();
        date.setTime(date.getTime() + expireTime);
        var expires = "; expires=" + date.toGMTString();
        document.cookie = name + "=" + value + expires + "; path=/";
    },
    getCookie: function (name) {
        var value = "; " + document.cookie;
        var parts = value.split("; " + name + "=");
        if (parts.length == 2) {
            return parts.pop().split(";").shift();
        }
    },
    deleteCookie: function(name) {
        document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';
    }
};

-1

여기 에 언급 된 w3chools 의 예가 있습니다 .

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 "";
}

-1

간단한 읽기

var getCookie = function (name) {
    var valueStart = document.cookie.indexOf(name + "=") + name.length + 1;
    var valueEnd = document.cookie.indexOf(";", valueStart); 
    return document.cookie.slice(valueStart, valueEnd)
}

-2

쿠키를 읽는 건방진 간단한 방법은 다음과 같습니다.

let username, id; 
eval(document.cookie); 
console.log(username + ", " + id); // John Doe, 123

쿠키에 다음과 같은 내용이 포함되어 있음을 알고있는 경우 사용할 수 있습니다 username="John Doe"; id=123;. 쿠키에는 문자열에 따옴표가 필요합니다. 권장되는 방법은 아니지만 테스트 / 학습에 효과적입니다.

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