Прочитайте javascript cookie по имени - PullRequest
27 голосов
/ 28 февраля 2011

Я установил cookie, используя

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

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

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

Ответы [ 11 ]

20 голосов
/ 02 августа 2012

Используйте конструктор 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');
14 голосов
/ 28 февраля 2011

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

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

11 голосов
/ 28 февраля 2011
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, приведенный выше код неверен , пожалуйста, см. Следующий ответ Функции getCookie Javascript

3 голосов
/ 19 января 2015

с использованием jquery-cookie

Я считаю эту библиотеку полезной. 3,128 КБ чистого удобства.

добавить скрипт

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

набор печенья

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

чтение файла cookie

$.cookie('name');
2 голосов
/ 26 февраля 2018

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

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

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

2 голосов
/ 06 марта 2014
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');
    }
}
2 голосов
/ 16 мая 2013

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

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

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

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

makeCookie('color', 'silver');

Это экономитпеченье, указывающее, что цвет серебристый.Срок действия файла 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 часа (двадцать четвертого дня).Эти ограничения по времени соблюдаются, даже если они выходят из браузера, и даже если они не выходят из браузера.Пользователи могут свободно использовать другую браузерную программу или удалять куки.Если они это сделают, куки не будут действовать, независимо от даты истечения срока действия.

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

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

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

rmCookie('rememberlogin');

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

1 голос
/ 16 июня 2016

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

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"];
1 голос
/ 12 ноября 2011

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

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

0 голосов
/ 08 апреля 2019

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

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

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

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

Cookies хранятся в document.cookie, например: cookieName=cookieValue;cookieName2=cookieValue2;.....

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...