it-swarm.com.de

cookie prüfen, ob Cookie vorhanden ist

Wie kann ich prüfen, ob ein Cookie existiert?

Bedingungen:

Cookie existiert wenn

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

Cookie existiert nicht wenn

cookie=;
//or
<blank>
55
confuzzled

Sie können die Funktion getCookie mit dem Namen des gewünschten Cookies aufrufen und dann prüfen, ob es = null ist.

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
    }
}
96
jac

Ich habe eine alternative Version ohne jQuery entwickelt:

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

Es wird nur auf die Existenz von Cookies geprüft. Eine kompliziertere Version kann auch einen Cookie-Wert zurückgeben:

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

Setzen Sie Ihren Cookie-Namen anstelle von MyCookie ein.

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

Es wird -1 zurückgegeben, wenn das Cookie nicht existiert.

p.s. Der einzige Nachteil ist (wie in Kommentaren erwähnt), dass es falsch ist, wenn ein Cookie mit einem solchen Namen gesetzt wird: any_prefix_cookie_name

( Quelle )

16
HackToHell

ACHTUNG! .__ Die gewählte Antwort enthält einen Fehler (Jacs Antwort).

wenn Sie mehr als einen Cookie haben (sehr wahrscheinlich ...) und der Cookie, den Sie abrufen, der erste in der Liste ist, wird die Variable nicht als "end" festgelegt. Daher wird die gesamte Zeichenfolge nach "cookiename" zurückgegeben = "innerhalb der document.cookie-Zeichenfolge!

hier ist eine überarbeitete Version dieser Funktion:

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, ''); 
}
7
Pikkio

Wenn Sie jQuery verwenden, können Sie das Plugin jquery.cookie verwenden.

Den Wert für ein bestimmtes Cookie erhalten Sie wie folgt:

$.cookie('MyCookie'); // Returns the cookie value
5
HeWhoProtects

regexObject. test (String) ist schneller als string. match (RegExp). 

Die MDN-Site beschreibt das Format für document.cookie und enthält eine Beispiel-Regex, um ein Cookie (document.cookie.replace(/(?:(?:^|.*;\s*)test2\s*\=\s*([^;]*).*$)|^.*$/, "$1");) zu erhalten. Davon ausgehend möchte ich folgendes:

/^(.*;)?\s*cookie1\s*=/.test(document.cookie);

Die Frage scheint nach einer Lösung zu fragen, die false zurückgibt, wenn der Cookie gesetzt, aber leer ist. In diesem Fall:

/^(.*;)?\s*cookie1\s*=\s*[^;]/.test(document.cookie);

Tests

function cookieExists(input) {return /^(.*;)?\s*cookie1\s*=/.test(input);}
function cookieExistsAndNotBlank(input) {return /^(.*;)?\s*cookie1\s*=\s*[^;]/.test(input);}
var testCases = ['cookie1=;cookie1=345534;', 'cookie1=345534;cookie1=;', 'cookie1=345534;', ' cookie1 = 345534; ', 'cookie1=;', 'cookie123=345534;', 'cookie=345534;', ''];
console.table(testCases.map(function(s){return {'Test String': s, 'cookieExists': cookieExists(s), 'cookieExistsAndNotBlank': cookieExistsAndNotBlank(s)}}));

 Test results (Chrome 55.0.2883.87)

3
hajamie

anstelle der Cookie-Variablen würden Sie nur document.cookie.split verwenden ...

var cookie = 'cookie1=s; cookie1=; cookie2=test';
var cookies = cookie.split('; ');
cookies.forEach(function(c){
  if(c.match(/cookie1=.+/))
   console.log(true);
});

0
KFish

verwenden Sie stattdessen diese Methode:

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

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

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

Für alle, die Node verwenden, habe ich eine schöne und einfache Lösung mit ES6-Importen und dem Modul cookie gefunden!

Installieren Sie zuerst das Cookie-Modul (und speichern Sie es als Abhängigkeit):

npm install --save cookie

Dann importieren und verwenden Sie:

import cookie from 'cookie';
let parsed = cookie.parse(document.cookie);
if('cookie1' in parsed) 
    console.log(parsed.cookie1);
0
jonny
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{
            var oneCookie = dc.indexOf(';', begin);
            if(oneCookie == -1){
                var end = dc.length;
            }else{
                var end = oneCookie;
            }
            return dc.substring(begin, end).replace(prefix,'');
        } 

    }
    else
    {
        begin += 2;
        var end = document.cookie.indexOf(";", begin);
        if (end == -1) {
            end = dc.length;
        }
        var fixed = dc.substring(begin, end).replace(prefix,'');
    }
    // return decodeURI(dc.substring(begin + prefix.length, end));
    return fixed;
} 

@Jac-Funktion ausprobiert, etwas Mühe bekommen, hier habe ich seine Funktion bearbeitet.

0
Matheus

Dies ist eine alte Frage, aber hier verwende ich den Ansatz ...

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

Dies gibt null entweder zurück, wenn das Cookie nicht existiert oder wenn es den angeforderten Namen nicht enthält.
Andernfalls wird der Wert (des angeforderten Namens) zurückgegeben.

Ein Cookie sollte niemals ohne einen Wert existieren - denn wozu soll das alles fair sein? ????
Wenn es nicht mehr benötigt wird, ist es am besten, alles zusammen loszuwerden.

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