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

Прочитать файл cookie javascript по имени

Я установил файл cookie с помощью

document.cookie = 
    'MYBIGCOOKIE=' + value + 
    '; expires=' + now.toGMTString() + 
    '; path=/';

Теперь на этом сайте установлено от 5 до 10 файлов cookie, есть ли способ проверить значение этого файла cookie по имени.

if (document.cookie.MYBIGCOOKIE == '1') {
    alert('it is 1')
}
4b9b3361

Ответ 1

Используйте конструктор RegExp и несколько замен для уточнения синтаксиса:

function getCook(cookiename) 
  {
  // Get name followed by anything except a semicolon
  var cookiestring=RegExp(""+cookiename+"[^;]+").exec(document.cookie);
  // Return everything after the equal sign, or an empty string if the cookie name not found
  return decodeURIComponent(!!cookiestring ? cookiestring.toString().replace(/^[^=]+./,"") : "");
  }

//Sample usage
var cookieValue = getCook('MYBIGCOOKIE');

Ответ 2

К сожалению, синтаксис Javascript cookie нигде не близок. На самом деле, на мой взгляд, это одна из наихудших деталей.

Когда вы пытаетесь прочитать document.cookie, вы получите строку, содержащую все файлы cookie. Вы должны проанализировать строку, разделяя ее символом с запятой ;. Вместо того, чтобы писать это самостоятельно, в Интернете доступно множество версий. Мой любимый тот, кто находится на quirksmode.org. Это дает вам функции createCookie, readCookie и deleteCookie.

Ответ 3

function getCookie(c_name)
{
    var i,x,y,ARRcookies=document.cookie.split(";");

    for (i=0;i<ARRcookies.length;i++)
    {
        x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
        y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
        x=x.replace(/^\s+|\s+$/g,"");
        if (x==c_name)
        {
            return unescape(y);
        }
     }
}

Источник: W3Schools

Изменить: как отметил @zcrar70, приведенный выше код неверен, см. следующий ответ Функции javascript getCookie

Ответ 4

с помощью jquery-cookie

Я нахожу эту библиотеку полезной. 3.128 kb чистого удобства.

добавить script

<script src="/path/to/jquery.cookie.js"></script>

установить файл cookie

$.cookie('name', 'value');

прочитать cookie

$.cookie('name');

Ответ 5

Точка должна предоставить базу данных с хорошими качественными ответами, поэтому я собираюсь ссылаться на некоторый стандартный исходный код и статью, в которой приводятся примеры:

http://www.codelib.net/javascript/cookies.html

Примечание. Код является регулярным выражением без значительного повышения эффективности.

Используя исходный код, вы можете использовать такие файлы:

makeCookie('color', 'silver');

Это сохраняет файл cookie, указывающий, что цвет серебристый. Файл cookie истечет после текущего сеанса (как только пользователь покинет браузер).

makeCookie('color', 'green', { domain: 'gardens.home.com' });

Это сохраняет зеленый цвет для gardens.home.com.

makeCookie('color', 'white', { domain: '.home.com', path: '/invoices' });
makeCookie('invoiceno', '0259876', { path: '/invoices', secure: true });

сохраняет белый цвет для счетов-фактур, просматриваемых в любом месте на сайте home.com. Второй файл cookie является безопасным файлом cookie и записывает номер счета-фактуры. Этот файл cookie будет отправляться только на страницы, которые просматриваются через безопасные HTTPS-соединения, а скрипты на защищенных страницах - это единственные сценарии, разрешающие доступ к файлу cookie.

Один HTTP-хост не может хранить или читать файлы cookie для другого хоста HTTP. Таким образом, домен cookie должен храниться не менее двух периодов. По умолчанию домен совпадает с доменом веб-адреса, который создал файл cookie.

Путь файла cookie HTTP ограничивает его некоторыми файлами на хосте HTTP. В некоторых браузерах используется путь по умолчанию /, поэтому cookie будет доступен на всем хосте. Другие браузеры используют все имя файла. В этом случае, если /invoices/overdue.cgi создает файл cookie, только /invoices/overdue.cgi собирается вернуть файл cookie.

При настройке путей и других параметров они обычно основаны на данных, полученных из таких переменных, как location.href и т.д. Эти строки уже экранированы, поэтому при создании файла cookie функция cookie не возвращает эти значения снова. Только имя и значение cookie экранируются, поэтому мы можем удобно использовать произвольные имена или значения. Некоторые браузеры ограничивают общий размер файла cookie или общее количество файлов cookie, которым разрешен один домен.

makeCookie('rememberemail', 'yes', { expires: 7 });
makeCookie('rememberlogin', 'yes', { expires: 1 });
makeCookie('allowentergrades', 'yes', { expires: 1/24 });

эти файлы cookie будут помнить адрес электронной почты пользователя в течение 7 дней, пользовательский логин в течение 1 дня и позволяет пользователю вводить оценки без пароля в течение 1 часа (двадцать четвертая дня). Эти ограничения соблюдаются, даже если они покидают браузер и даже не покидают браузер. Пользователи могут свободно использовать другую программу браузера или удалять файлы cookie. Если они это сделают, файлы cookie не будут иметь никакого эффекта, независимо от даты истечения срока действия.

makeCookie('rememberlogin', 'yes', { expires: -1 });

удаляет файл cookie. Значение cookie является излишним, а возвращаемое значение false означает, что удаление было успешным. (Истечение -1 используется вместо 0. Если мы использовали 0, cookie может быть восстановлен до одной секунды за текущее время. В этом случае мы думаем, что удаление было неудачным.)

Очевидно, что поскольку cookie можно удалить таким образом, новый файл cookie также перезапишет любое значение старого cookie с таким же именем, включая дату истечения срока действия и т.д. Однако файлы cookie для полностью неперекрывающихся путей или домены хранятся отдельно, и одни и те же имена не мешают друг другу. Но в целом любой путь или домен, имеющий доступ к файлу cookie, может перезаписывать файл cookie, независимо от того, изменяет ли он путь или домен нового файла cookie.

rmCookie('rememberlogin');

также удаляет файл cookie, выполняя makeCookie('rememberlogin', '', { expires: -1 }). Это делает код cookie более длинным, но сохраняет код для людей, которые его используют, что, возможно, будет сэкономить больше кода в долгосрочной перспективе.

Ответ 6

document.cookie="MYBIGCOOKIE=1";

Ваши файлы cookie будут выглядеть так:

"MYBIGCOOKIE=1; PHPSESSID=d76f00dvgrtea8f917f50db8c31cce9"

сначала прочитайте все файлы cookie:

var read_cookies = document.cookie;

затем разделите все файлы cookie на ";" :

var split_read_cookie = read_cookies.split(";");

затем используйте для цикла, чтобы прочитать каждое значение. В цикле каждое значение снова разбивается на "=" :

for (i=0;i<split_read_cookie.length;i++){
    var value=split_read_cookie[i];
    value=value.split("=");
    if(value[0]=="MYBIGCOOKIE" && value[1]=="1"){
        alert('it is 1');
    }
}

Ответ 7

Один из самых коротких способов - это, однако, как уже упоминалось ранее, он может вернуть неправильный файл cookie, если есть похожие имена (MyCookie против AnotherMyCookie):

var regex = /MyCookie=(.[^;]*)/ig;
var match = regex.exec(document.cookie);
var value = match[1];

Я использую это в расширении Chrome, так что я знаю имя, которое я задаю, и я могу убедиться, что дубликатов не будет, более или менее.

Ответ 8

Вот API, который был написан, чтобы сгладить неприятный куки файл cookie браузера "API"

http://code.google.com/p/cookies/

Ответ 9

Вы можете использовать следующую функцию:

function getCookiesMap(cookiesString) {
  return cookiesString.split(";")
    .map(function(cookieString) {
        return cookieString.trim().split("=");
    })
    .reduce(function(acc, curr) {
        acc[curr[0]] = curr[1];
        return acc;
    }, {});
}

Когда вызывается с параметром document.cookie как параметр, он возвращает объект с ключами cookie как ключи и значениями cookie.

var cookies = getCookiesMap(document.cookie);
var cookieValue = cookies["MYBIGCOOKIE"];

Ответ 10

Вот пример реализации, которая сделает этот процесс бесшовным (Заимствовано из AngularJs)

var CookieReader = (function(){
var lastCookies = {};
var lastCookieString = '';

function safeGetCookie() {
    try {
        return document.cookie || '';
    } catch (e) {
        return '';
    }
}

function safeDecodeURIComponent(str) {
    try {
        return decodeURIComponent(str);
    } catch (e) {
        return str;
    }
}

function isUndefined(value) {
    return typeof value === 'undefined';
}

return function () {
    var cookieArray, cookie, i, index, name;
    var currentCookieString = safeGetCookie();

    if (currentCookieString !== lastCookieString) {
        lastCookieString = currentCookieString;
        cookieArray = lastCookieString.split('; ');
        lastCookies = {};

        for (i = 0; i < cookieArray.length; i++) {
            cookie = cookieArray[i];
            index = cookie.indexOf('=');
            if (index > 0) { //ignore nameless cookies
                name = safeDecodeURIComponent(cookie.substring(0, index));

                if (isUndefined(lastCookies[name])) {
                    lastCookies[name] = safeDecodeURIComponent(cookie.substring(index + 1));
                }
            }
        }
    }
    return lastCookies;
};
})();

Ответ 11

Я думаю, что самый простой способ прочитать cookie - это использовать Regexp следующим образом:

** Замените COOKIE_NAME на имя вашего куки.

document.cookie.match(/COOKIE_NAME=([^;]*);/)[1]

Как это работает?

Файлы cookie хранятся в document.cookie следующим образом: cookieName=cookieValue;cookieName2=cookieValue2;.....

Регулярное выражение ищет всю строку cookie в поисках буквально "COOKIE_NAME=" и захватывает после него все, что не является точкой с запятой, до тех пор, пока оно фактически не найдет точку с запятой;

Затем мы используем [1] чтобы получить второй элемент из массива, который является захваченной группой.