javascript - Cum verific dacă există un cookie?


Care este un mod bun de a verifica dacă un cookie există?

Condiții:

Cookie există dacă

cookie1=;cookie1=345534;
//or
cookie1=345534;cookie1=;
//or
cookie1=345534;

Cookie-ul nu există dacă

cookie=;
//or
<blank>

Răspuns #1

Poți apela funcția getCookie cu numele cookie-ului pe care îl dorești, apoi verifici dacă este=null.

function getCookie(name) {
    var dc = document.cookie;
    var prefix = name + "=";
    var begin = dc.indexOf("; " + prefix);
    if (begin == -1) {
        begin = dc.indexOf(prefix);
        if (begin != 0) return null;
    }
    else
    {
        begin += 2;
        var end = document.cookie.indexOf(";", begin);
        if (end == -1) {
        end = dc.length;
        }
    }
    // because unescape has been deprecated, replaced with decodeURI
    //return unescape(dc.substring(begin + prefix.length, end));
    return decodeURI(dc.substring(begin + prefix.length, end));
} 

function doSomething() {
    var myCookie = getCookie("MyCookie");

    if (myCookie == null) {
        // do cookie doesn't exist stuff;
    }
    else {
        // do cookie exists stuff
    }
}

Răspunsul #2

Am creat o versiune alternativă fără jQuery:

document.cookie.match(/^(.*;)?\s*MyCookie\s*=\s*[^;]+(.*)?$/)

Testează doar existența cookie-ului. O versiune mai complicată poate returna și valoarea cookie-ului:

value_or_null = (document.cookie.match(/^(?:.*;)?\s*MyCookie\s*=\s*([^;]+)(?:.*)?$/)||[,null])[1]

Puneți numele cookie-ului dvs. în locul lui MyCookie.

Răspunsul #3

document.cookie.indexOf('cookie_name=');

Va returna -1 dacă acel cookie nu există.

p.s. Singurul dezavantaj al acestuia este (așa cum s-a menționat în comentarii) că va confunda dacă există un cookie setat cu un astfel de nume: any_prefix_cookie_name

(Sursă)

Răspunsul #4

Aceasta este o întrebare veche, dar iată abordarea pe care o folosesc ...

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

Aceasta returnează null fie atunci când cookie-ul nu există, fie atunci când nu conține numele solicitat.
În caz contrar, se returnează valoarea (a numelui solicitat).

Un cookie nu ar trebui să existe niciodată fără o valoare -- pentru că, în toată sinceritatea, care e rostul asta? 😄
Dacă nu mai este necesar, cel mai bine este să-l elimini complet.

function deleteCookie(name) {
    document.cookie = name +"=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;";
}

Răspunsul #5

ATENȚIE! răspunsul ales conține un bug (răspunsul lui Jac).

dacă ai mai multe de un cookie (foarte probabil..) și cookie-ul pe care îl recuperezi este primul din listă, nu setează variabila „end” și, prin urmare, va returna șirul complet de caractere care urmează după „cookieName=” în șirul document.cookie!

iată o versiune revizuită a acelei funcții:

function getCookie( name ) {
    var dc,
        prefix,
        begin,
        end;
    
    dc = document.cookie;
    prefix = name + "=";
    begin = dc.indexOf("; " + prefix);
    end = dc.length; // default to end of the string

    // found, and not in first position
    if (begin !== -1) {
        // exclude the "; "
        begin += 2;
    } else {
        //see if cookie is in first position
        begin = dc.indexOf(prefix);
        // not found at all or found as a portion of another cookie name
        if (begin === -1 || begin !== 0 ) return null;
    } 

    // if we find a ";" somewhere after the prefix position then "end" is that position,
    // otherwise it defaults to the end of the string
    if (dc.indexOf(";", begin) !== -1) {
        end = dc.indexOf(";", begin);
    }

    return decodeURI(dc.substring(begin + prefix.length, end) ).replace(/\"/g, ''); 
}