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