source

쿠키 이름 가져오기

nicesource 2023. 1. 19. 06:57
반응형

쿠키 이름 가져오기

쿠키에서 가치를 얻을 수 있는 게터가 있어요.

는 지금 .shares= 이름 ''''''''''''''''''obligations=

나는 이 getter를 오직 의무 쿠키의 값을 얻기 위해서만 만들고 싶다.

so so? 래래......for는 데이터를 개별 값으로 분할하여 배열에 배치합니다.

 function getCookie1() {
    // What do I have to add here to look only in the "obligations=" cookie? 
    // Because now it searches all the cookies.

    var elements = document.cookie.split('=');
    var obligations= elements[1].split('%');
    for (var i = 0; i < obligations.length - 1; i++) {
        var tmp = obligations[i].split('$');
        addProduct1(tmp[0], tmp[1], tmp[2], tmp[3]);
    }
 }

어레이에 대한 반복을 방지하는 한 가지 방법은 다음과 같습니다.

function getCookie(name) {
  const value = `; ${document.cookie}`;
  const parts = value.split(`; ${name}=`);
  if (parts.length === 2) return parts.pop().split(';').shift();
}

워크스루

토큰으로 문자열을 분할하면 문자열에 토큰이 존재하지 않는 경우 문자열(같은 값)이 1개 있는 배열 또는 문자열에 토큰이 있는 경우 문자열이 2개 있는 배열 중 하나가 생성됩니다.

첫 번째(왼쪽) 요소는 토큰 이전의 문자열이고 두 번째(오른쪽) 요소는 토큰 이후의 문자열입니다.

(주의: 문자열이 토큰으로 시작하는 경우 첫 번째 요소는 빈 문자열입니다.)

쿠키가 다음과 같이 저장되는 것을 고려합니다.

"{name}={value}; {name}={value}; ..."

특정 쿠키 값을 가져오려면 "; {name}=" 뒤에 있는 문자열과 다음 ";" 앞에 있는 문자열만 가져오면 됩니다.처리를 하기 전에 쿠키 문자열 앞에 ";"를 붙입니다.이렇게 하면 첫 번째 쿠키 이름을 포함한 모든 쿠키 이름이 ";" 및 "="로 둘러싸여 있습니다.

"; {name}={value}; {name}={value}; ..."

먼저 "; {name}="로 나눌 수 있으며, 쿠키 문자열에 토큰이 있는 경우(즉, 2개의 요소가 있는 경우), 두 번째 요소는 쿠키 값으로 시작하는 문자열이 됩니다.그런 다음 배열에서 해당 항목을 추출하고(예: 팝), 동일한 프로세스를 반복하지만, 이번에는 토큰으로 ";"를 사용하지만 실제 토큰 값을 얻기 위해 왼쪽 문자열(예: 시프트)을 추출합니다.

쿠키에서 하나의 정규 표현식 일치를 사용하는 것이 좋습니다.

window.getCookie = function(name) {
  var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
  if (match) return match[2];
}

또는 함수로도 사용할 수 있습니다.아래의 코드를 확인해 주세요.

function check_cookie_name(name) 
    {
      var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
      if (match) {
        console.log(match[2]);
      }
      else{
           console.log('--something went wrong---');
      }
   }

Scott Jungworth의 댓글 덕분에 향상되었습니다.

정규 표현을 사용하는 다른 답변의 방법 중 일부는 모든 경우를 대상으로 하는 것은 아닙니다.특히 다음과 같습니다.

  1. 쿠키가 마지막 쿠키일 때.이 경우 cookie 값 뒤에는 세미콜론이 없습니다.
  2. 다른 쿠키 이름이 검색되고 종료되었을 때.예를 들어 "one"이라는 이름의 쿠키를 찾고 있으며 "done"이라는 이름의 쿠키가 있다고 가정합니다.
  3. cookie 이름에 백슬래시가 선행되지 않는 한 정규 표현에서 사용할 때 그 자체로 해석되지 않는 문자가 포함된 경우.

이러한 경우는, 다음의 방법으로 처리됩니다.

function getCookie(name) {
    function escape(s) { return s.replace(/([.*+?\^$(){}|\[\]\/\\])/g, '\\$1'); }
    var match = document.cookie.match(RegExp('(?:^|;\\s*)' + escape(name) + '=([^;]*)'));
    return match ? match[1] : null;
}

하면 반환됩니다.null★★★★★★★★★★★★★★★★」쿠키 값이 비어 있으면 빈 문자열을 반환합니다.

주의:

  1. 이 함수는 cookie 이름이 대소문자를 구분한다고 가정합니다.
  2. document.cookie - 할당 오른쪽에 나타나는 경우 세미콜론으로 구분된 쿠키 목록을 포함하는 문자열을 나타냅니다. 이 문자열은 다음과 같습니다.name=value각 세미콜론 뒤에 공백이 하나 있는 것 같습니다
  3. String.prototype.match() - 반품null을 사용법하는 것이하고 인덱스에 를 반환한다.[1]는 첫 번째 일치하는 그룹의 값입니다.

정규 표현에 관한 주의:

  1. (?:xxxx) 그룹을 - 비동일 그룹을 형성합니다.
  2. ^합니다. - 문자열의 선두와 일치합니다.
  3. |합니다.-그 - 、 - - for for 。
  4. ;\\s*와 0 1 개 、 0 、 0 、 - 、 - -개개 。
  5. = - 등호 하나와 일치합니다.
  6. (xxxx) 그룹을 - 매칭 그룹을 형성합니다.
  7. [^;]* 반점 이외에는 0자 이상입니다.시킵니다(포함하지 .

jQuery를 사용하는 경우 다음 플러그인을 사용하는 것이 좋습니다.

https://github.com/carhartl/jquery-cookie
https://github.com/carhartl/jquery-cookie/blob/master/jquery.cookie.js

<script type="text/javascript"
 src="//cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js">

cookie는 다음과 같이 읽을 수 있습니다.

var value = $.cookie("obligations");

쿠키도 쓸 수 있습니다.

$.cookie('obligations', 'new_value');
$.cookie('obligations', 'new_value', { expires: 14, path: '/' });

쿠키 삭제:

$.removeCookie('obligations');

다음으로 외부 lib를 사용하지 않고 특정 이름의 cookie 값을 얻기 위한1개의 라이너를 나타냅니다.

const value = ('; '+document.cookie).split(`; COOKIE_NAME=`).pop().split(';')[0];

답변은 킬리치의 훌륭한 해결책에 기초하고 있다.이 솔루션의 유일한 타협점은 쿠키가 존재하지 않을 때 빈 문자열을 얻는 것입니다.단, 대부분의 경우 이것은 거래 위반이 되지 않습니다.

4년 후 ES6는 훨씬 더 심플한 버전입니다.

function getCookie(name) {
  let cookie = {};
  document.cookie.split(';').forEach(function(el) {
    let [k,v] = el.split('=');
    cookie[k.trim()] = v;
  })
  return cookie[name];
}

, 그것을 사용하는 요지를 작성했습니다.Cookie '오브젝트') §:Cookie.set(name,value) ★★★★★★★★★★★★★★★★★」Cookie.get(name)

이렇게 하면 모든 쿠키를 스캔하지 않고 읽을 수 있습니다.쿠키 수가 적으면 괜찮아요.

Jonathan이 여기서 제공한 함수를 수정했습니다.정규 표현을 사용하면 쿠키 값을 다음과 같이 이름으로 얻을 수 있습니다.

function getCookie(name){
    var pattern = RegExp(name + "=.[^;]*")
    var matched = document.cookie.match(pattern)
    if(matched){
        var cookie = matched[0].split('=')
        return cookie[1]
    }
    return false
}

빈 문자열이 반환되면 쿠키가 존재하지만 값이 없음을 의미하며 false가 반환되면 쿠키가 존재하지 않습니다.이게 도움이 됐으면 좋겠어요.

간단한 방법:)

const cookieObj = new URLSearchParams(document.cookie.replaceAll("&", "%26").replaceAll("; ","&"))
cookieObj.get("your-cookie-name")

쿠키를 JavaScript 객체 또는 맵으로 변환하는 라이너 1개

Object.fromEntries(document.cookie.split('; ').map(v=>v.split(/=(.*)/s).map(decodeURIComponent)))
new Map(document.cookie.split('; ').map(v=>v.split(/=(.*)/s).map(decodeURIComponent)))

js-cookie 라이브러리를 사용하여 JavaScript 쿠키를 가져오고 설정할 수 있습니다.

HTML에 포함:

<script src="https://cdn.jsdelivr.net/npm/js-cookie@2/src/js.cookie.min.js"></script>

쿠키를 작성하려면:

Cookies.set('name', 'value');

쿠키를 읽으려면:

Cookies.get('name'); // => 'value'

여기 꽤 짧은 버전이 있습니다.

 function getCookie(n) {
    let a = `; ${document.cookie}`.match(`;\\s*${n}=([^;]+)`);
    return a ? a[1] : '';
}

ES6의 템플릿 문자열을 사용하여 regex 식을 구성했습니다.

나의 유일한 선형 함수는 쿠키의 키를 통해 가치 쿠키를 얻는 것이다.

cookie = key=>((new RegExp((key || '=')+'=(.*?); ','gm')).exec(document.cookie+'; ') ||['',null])[1]

cookie 함수를 다음과 같이 호출합니다.

cookie('some-key')

오래된 질문인 건 알지만 저도 이 문제를 발견했어요.참고로 개발자 모질라 웹페이지에는 작은 API가 있습니다.

Yoy는 JS만을 사용하여 어떤 쿠키든 이름으로 가져올 수 있습니다.코드도 깔끔한 IMHO입니다(긴 줄을 제외하고 쉽게 고칠 수 있을 것입니다).

function getCookie(sKey) {
    if (!sKey) { return null; }
    return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(sKey).replace(/[\-\.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null;
}

코멘트에 기재되어 있듯이, 이 메서드는 키와 값이 부호화를 사용하여 부호화된 것을 전제로 하고 있습니다.URIC 컴포넌트().디코드 및 인코딩 삭제쿠키의 키와 값이 부호화되지 않은 경우 URIComponent().

function getCookie(name) {
    var pair = document.cookie.split('; ').find(x => x.startsWith(name+'='));
    if (pair)
       return pair.split('=')[1]
}

Kirlich는 좋은 해결책을 제시했습니다.다만, 같은 이름의 cookie 값이 2개 있는 경우는 실패합니다.이 상황에 대한 간단한 수정은 다음과 같습니다.

function getCookie(name) {
  var value = "; " + document.cookie;
  var parts = value.split("; " + name + "=");
  if (parts.length >= 2) return parts.pop().split(";").shift();
}

object.defineProperty

이것으로 쿠키에 쉽게 접근할 수 있습니다.

Object.defineProperty(window, "Cookies", {
    get: function() {
        return document.cookie.split(';').reduce(function(cookies, cookie) {
            cookies[cookie.split("=")[0]] = unescape(cookie.split("=")[1]);
            return cookies
        }, {});
    }
});

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

alert( Cookies.obligations );

cookie를 하면 cookie가 으로 갱신됩니다.Cookies변화할 것이다.

cookie 키와 값의 쌍을 배열로 분할하고 이를 기반으로 검색할 수 있습니다.

var obligations = getCookieData("obligations");

다음 작업을 수행합니다.

function getCookieData( name ) {
    var pairs = document.cookie.split("; "),
        count = pairs.length, parts; 
    while ( count-- ) {
        parts = pairs[count].split("=");
        if ( parts[0] === name )
            return parts[1];
    }
    return false;
}

바이올린: http://jsfiddle.net/qFmPc/

또는 다음과 같은 경우도 있습니다.

function getCookieData( name ) {
    var patrn = new RegExp( "^" + name + "=(.*?);" ),
        patr2 = new RegExp( " " + name + "=(.*?);" );
    if ( match = (document.cookie.match(patrn) || document.cookie.match(patr2)) )
        return match[1];
    return false;
}

항상 정상적으로 동작합니다.

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

function setCookie(variable, value, expires_seconds) {
    var d = new Date();
    d = new Date(d.getTime() + 1000 * expires_seconds);
    document.cookie = variable + '=' + value + '; expires=' + d.toGMTString() + ';';
}

jQuery 등의 요건은 없습니다.완전히 오래된 양호한 JavaScript.

쿠키 이름을 가진 쿠키 Get cookie의 간단한 함수:

function getCookie(cn) {
    var name = cn+"=";
    var allCookie = decodeURIComponent(document.cookie).split(';');
    var cval = [];
    for(var i=0; i < allCookie.length; i++) {
        if (allCookie[i].trim().indexOf(name) == 0) {
            cval = allCookie[i].trim().split("=");
        }   
    }
    return (cval.length > 0) ? cval[1] : "";
}

클래스 MDN에 대해 것 .\b된 에 일치합니다.\w+에 가 있다\W+:

getCookie = function(name) {
    var r = document.cookie.match("\\b" + name + "=([^;]*)\\b");
    return r ? r[1] : null;
};

var obligations = getCookie('obligations');

프로젝트에서는 다음 기능을 사용하여 쿠키에 이름으로 액세스합니다.

function getCookie(cookie) {
    return document.cookie.split(';').reduce(function(prev, c) {
        var arr = c.split('=');
        return (arr[0].trim() === cookie) ? arr[1] : prev;
    }, undefined);
}

이미 쿠키를 얻는 것에 대한 좋은 답변들이 여기 있지만하지만 여기 저만의 해결책이 있습니다.

function getcookie(cookiename){
var cookiestring  = document.cookie;
var cookiearray = cookiestring.split(';');
for(var i =0 ; i < cookiearray.length ; ++i){ 
    if(cookiearray[i].trim().match('^'+cookiename+'=')){ 
        return cookiearray[i].replace(`${cookiename}=`,'').trim();
    }
} return null;
}

사용방법: '

     getcookie('session_id');
   // gets cookie with name session_id

javascript에 의해 설정되다

document.cookie = 'cookiename=tesing';

jquery-displugin으로 jquery를 하다

var value = $.cookie("cookiename");

alert(value);
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 "";
}

getCookie() 함수에 쿠키 이름을 전달하여 값을 가져옵니다.

저의 솔루션은 다음과 같습니다.

function getCookieValue(cookieName) {
    var ca = document.cookie.split('; ');
    return _.find(ca, function (cookie) {
        return cookie.indexOf(cookieName) === 0;
    });
}

이 함수는 Underscorejs _.find-function을 사용합니다.쿠키 이름이 없는 경우 정의되지 않은 값을 반환합니다.

난 이런 식으로 해왔어. 그래서 나는 가치들을 분리하기 위해 접근하기 위한 객체를 얻으려고.이를 통해 쿠키를 부모에게 전달하고 다음과 같은 키로 값에 액세스할 수 있습니다.

var cookies=getCookieVal(mycookie);
alert(cookies.mykey);
function getCookieVal(parent) {
            var cookievalue = $.cookie(parent).split('&');
            var obj = {};
            $.each(cookievalue, function (i, v) {
                var key = v.substr(0, v.indexOf("="));
                var val = v.substr(v.indexOf("=") + 1, v.length);

                obj[key] = val;

            });
            return obj;
        }  

아래 기능(순수 Javascript 코드)만 사용하시면 됩니다.

const getCookie = (name) => {
 const cookies = Object.assign({}, ...document.cookie.split('; ').map(cookie => {
    const name = cookie.split('=')[0];
    const value = cookie.split('=')[1];

    return {[name]: value};
  }));

  return cookies[name];
};

사용하기 쉬울 것 같은 글을 썼는데, 덧붙일 것이 있으면 언제든지 써주세요.

function getcookie(name = '') {
    let cookies = document.cookie;
    let cookiestore = {};
    
    cookies = cookies.split(";");
    
    if (cookies[0] == "" && cookies[0][0] == undefined) {
        return undefined;
    }
    
    cookies.forEach(function(cookie) {
        cookie = cookie.split(/=(.+)/);
        if (cookie[0].substr(0, 1) == ' ') {
            cookie[0] = cookie[0].substr(1);
        }
        cookiestore[cookie[0]] = cookie[1];
    });
    
    return (name !== '' ? cookiestore[name] : cookiestore);
}

사용.

getcookie()- 웹 페이지의 모든 쿠키가 포함된 개체를 반환합니다.

getcookie('myCookie')- cookie 객체에서 cookie myCookie 값을 반환하고, 그렇지 않으면 cookie가 비어 있거나 설정되지 않은 경우 정의되지 않은 값을 반환합니다.


// Have some cookies :-)
document.cookie = "myCookies=delicious";
document.cookie = "myComputer=good";
document.cookie = "myBrowser=RAM hungry";

// Read them
console.log( "My cookies are " + getcookie('myCookie') );
// Outputs: My cookies are delicious

console.log( "My computer is " + getcookie('myComputer') );
// Outputs: My computer is good

console.log( "My browser is " + getcookie('myBrowser') );
// Outputs: My browser is RAM hungry

console.log( getcookie() );
// Outputs: {myCookie: "delicious", myComputer: "good", myBrowser: "RAM hungry"}

// (does cookie exist?)
if (getcookie('hidden_cookie')) {
    console.log('Hidden cookie was found!');
} else {
    console.log('Still no cookie :-(');
}

// (do any cookies exist?)
if (getcookie()) {
    console.log("You've got cookies to eat!");
} else {
    console.log('No cookies for today :-(');
}

기존 쿠키를 찾기 위한 기능적 접근법입니다.배열을 반환하므로 동일한 이름의 여러 항목을 지원합니다.부분 키 매칭을 지원하지 않지만 필터의 ===를 정규식으로 교체하는 것은 간단한 일입니다.

function getCookie(needle) {
    return document.cookie.split(';').map(function(cookiestring) {
        cs = cookiestring.trim().split('=');

        if(cs.length === 2) {
            return {'name' : cs[0], 'value' : cs[1]};
        } else {
            return {'name' : '', 'value' : ''};
        }
    })
    .filter(function(cookieObject) { 
        return (cookieObject.name === needle);
    });
}

쿠키 이름을 아래 함수에 전달하기만 하면 쿠키 이름을 얻을 수 있습니다.

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

언급URL : https://stackoverflow.com/questions/10730362/get-cookie-by-name

반응형