vérifier cookie si le cookie existe
Quel est le bon moyen de vérifier si un cookie existe?
Conditions:
Le Cookie existe si
cookie1=;cookie1=345534;
//or
cookie1=345534;cookie1=;
//or
cookie1=345534;
Le Cookie n'existe pas si
cookie=;
//or
<blank>
12 réponses
Vous pouvez appeler la fonction getCookie avec le nom du cookie que vous voulez, puis vérifier si c'est = 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
}
}
J'ai conçu une version alternative non-jQuery:
document.cookie.match(/^(.*;)?\s*MyCookie\s*=\s*[^;]+(.*)?$/)
Il ne teste que l'existence de cookies. Une version plus compliquée peut également renvoyer la valeur du cookie:
value_or_null = (document.cookie.match(/^(?:.*;)?\s*MyCookie\s*=\s*([^;]+)(?:.*)?$/)||[,null])[1]
Mettez votre nom de cookie à la place de MyCookie
.
document.cookie.indexOf('cookie_name=');
Il retournera -1
si ce cookie n'existe pas.
P. S. seul inconvénient est (comme mentionné dans les commentaires) qu'il se trompera s'il y a un cookie avec un tel nom: any_prefix_cookie_name
(Source)
ATTENTION! la réponse choisie contient un bug (réponse de Jac).
Si vous avez plus d'un cookie (très probable..) et le cookie que vous récupérez est le premier sur la liste, il ne définit pas la variable "end "et donc il retournera toute la chaîne de caractères suivant le" cookieName= " dans le document.témoin de la chaîne!
Voici une version révisée de cette fonction:
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, '');
}
Si vous utilisez jQuery, vous pouvez utiliser le jquery.plugin cookie .
Obtenir la valeur d'un cookie particulier se fait comme suit:
$.cookie('MyCookie'); // Returns the cookie value
RegexObject.test( String ) est rapidement que string. correspond à (expression rationnelle).
Le site MDN décrit le format du document.cookie, et a un exemple regex pour saisir un cookie (document.cookie.replace(/(?:(?:^|.*;\s*)test2\s*\=\s*([^;]*).*$)|^.*$/, "$1");
). Sur cette base, j'irais pour ceci:
/^(.*;)?\s*cookie1\s*=/.test(document.cookie);
La question semble Demander une solution qui renvoie false lorsque le cookie est défini, mais vide. Dans ce cas:
/^(.*;)?\s*cookie1\s*=\s*[^;]/.test(document.cookie);
Essais
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)}}));
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;
}
Essayé la fonction @jac, a eu quelques problèmes, voici comment j'ai édité sa fonction.
Au lieu de la variable cookie, vous utiliseriez simplement document.cookie.Split...
var cookie = 'cookie1=s; cookie1=; cookie2=test';
var cookies = cookie.split('; ');
cookies.forEach(function(c){
if(c.match(/cookie1=.+/))
console.log(true);
});
Pour tous ceux qui utilisent Node, j'ai trouvé une solution simple et agréable avec les importations ES6 et le module cookie
!
Installez D'abord le module cookie (et enregistrez-le en tant que dépendance):
npm install --save cookie
Puis importer et utiliser:
import cookie from 'cookie';
let parsed = cookie.parse(document.cookie);
if('cookie1' in parsed)
console.log(parsed.cookie1);
Utilisez cette méthode à la place:
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
}
}
C'est une vieille question, Mais voici l'approche que j'utilise ...
function getCookie(name) {
var match = document.cookie.match(RegExp('(?:^|;\\s*)' + name + '=([^;]*)')); return match ? match[1] : null;
}
Retourne null
, soit lorsque le cookie n'existe pas, ou lorsqu'il ne contient pas le nom demandé.
Sinon, la valeur (du nom demandé) est renvoyée.
Un cookie ne devrait jamais exister sans valeur-parce que, en toute justice, à quoi ça sert?
Si il n'est plus nécessaire, il est préférable de se débarrasser de tout cela ensemble.
function deleteCookie(name) {
document.cookie = name +"=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;";
}
Si vous vérifiez simplement l'existence d'un cookie, pourquoi pas...
If (isset ($_COOKIE ['mycookie'])) {faire des choses ici}