Подтвердить что ты не робот

Проверить файл cookie, если cookie существует

Какой хороший способ проверить, существует ли файл cookie?

Условия:

Cookie существует, если

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

Cookie не существует, если

cookie=;
//or
<blank>
4b9b3361

Ответ 1

Вы можете вызвать функцию getCookie с именем файла cookie, который вы хотите, а затем проверить, является ли оно = 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
    }
}

Ответ 2

Я создал альтернативную версию, отличную от jQuery:

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

Он проверяет только существование cookie. Более сложная версия также может возвращать значение cookie:

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

Поместите свое имя файла cookie вместо MyCookie.

Ответ 3

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

Он вернет -1, если этот файл cookie не существует.

p.s. Единственным недостатком этого является (как упоминалось в комментариях), что он будет ошибочным, если есть файл cookie с таким именем: any_prefix_cookie_name

(Источник)

Ответ 4

Если вы используете jQuery, вы можете использовать плагин jquery.cookie.

Получение значения для определенного файла cookie выполняется следующим образом:

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

Ответ 5

ВНИМАНИЕ! выбранный ответ содержит ошибку (ответ Жака).

если у вас есть несколько файлов cookie (очень вероятно..), и файл cookie, который вы извлекаете, является первым в списке, он не устанавливает переменную "end" и, следовательно, она вернет всю строку символов, следующую "cookieName =" внутри строки document.cookie!

здесь представлен пересмотренный вариант этой функции:

function getCookie( name ) {
    var dc = document.cookie;
    var prefix = name + "=";
    var begin = dc.indexOf("; " + prefix);
    var end = null;
    if (begin == -1) {
        begin = dc.indexOf(prefix);
        if (begin != 0) return null;
        end = document.cookie.indexOf(";", begin);
    } else {
        begin += 2;
        end = document.cookie.indexOf(";", begin);
        if (end == -1) {
            end = dc.length;
        }
    }

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

Ответ 6

regexObject. test (String) быстрее, чем строка. match (RegExp).

сайт MDN описывает формат document.cookie и имеет пример regex для захвата файла cookie (document.cookie.replace(/(?:(?:^|.*;\s*)test2\s*\=\s*([^;]*).*$)|^.*$/, "$1");). Исходя из этого, я бы пошел на это:

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

Вопрос, похоже, требует решения, которое возвращает false, когда cookie установлен, но пуст. В этом случае:

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

Испытания

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

Результаты теста (Chrome 55.0.2883.87)

Ответ 7

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, получила некоторые проблемы, вот как я отредактировал его функцию.

Ответ 8

Если вы просто проверяете наличие файла cookie, почему бы и нет...

if (isset ($ _ COOKIE ['mycookie'])) {сделайте что-нибудь здесь}