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