Як встановити / скасувати cookie з jQuery?


1243

Як встановити та скасувати cookie за допомогою jQuery, наприклад створити файл cookie з ім'ям testта встановити значення 1?

Відповіді:


1767

Оновлення квітня 2019 року

jQuery не потрібен для читання / маніпулювання файлами cookie, тому не використовуйте оригінальну відповідь нижче.

Перейдіть на сторінку https://github.com/js-cookie/js-cookie і використовуйте там бібліотеку, яка не залежить від jQuery.

Основні приклади:

// Set a cookie
Cookies.set('name', 'value');

// Read the cookie
Cookies.get('name') => // => 'value'

Докладніше дивіться документи в github.


Дивіться плагін:

https://github.com/carhartl/jquery-cookie

Потім ви можете зробити:

$.cookie("test", 1);

Щоб видалити:

$.removeCookie("test");

Крім того, щоб встановити час очікування на певну кількість днів (10 тут) на cookie:

$.cookie("test", 1, { expires : 10 });

Якщо опція закінчується, то cookie стає сесійним файлом cookie та видаляється, коли браузер закривається.

Щоб охопити всі варіанти:

$.cookie("test", 1, {
   expires : 10,           // Expires in 10 days

   path    : '/',          // The value of the path attribute of the cookie
                           // (Default: path of page that created the cookie).

   domain  : 'jquery.com', // The value of the domain attribute of the cookie
                           // (Default: domain of page that created the cookie).

   secure  : true          // If set to true the secure attribute of the cookie
                           // will be set and the cookie transmission will
                           // require a secure protocol (defaults to false).
});

Щоб прочитати значення файлу cookie:

var cookieValue = $.cookie("test");

Ви можете вказати параметр шляху, якщо файл cookie створено іншим шляхом до поточного:

var cookieValue = $.cookie("test", { path: '/foo' });

ОНОВЛЕННЯ (квітень 2015):

Як зазначено в коментарях нижче, команда, яка працювала над оригінальним плагіном, усунула залежність jQuery у новому проекті ( https://github.com/js-cookie/js-cookie ), який має таку ж функціональність та загальний синтаксис, що й версія jQuery Мабуть, оригінальний плагін нікуди не дінеться.


1
з журналу змін: "$ .removeCookie (" foo ") для видалення файлу cookie, використовуючи $ .cookie ('foo', null), тепер застаріло"
bogdan

68
@Kazar Я провів 6 годин, без перерв. Я нарешті зрозумів проблему сьогодні вранці. Я використовую це з phonegap, на сайті він працює без проблем, але на пристрої, коли ви намагаєтеся отримати файл cookie, у якому є JSON, це вже об'єкт, тому якщо ви спробуєте JSON.parse it, це дасть помилку розбору JSON Вирішили це за допомогою "if typeof x == 'string" "виконайте JSON.parse, інакше просто використовуйте об'єкт. 6 чортових годин шукати помилку у всіх неправильних місцях
Андрій Крістіан Продан

10
видаляючи файл cookie, також переконайтеся, що шлях встановлено на той самий шлях, який ви встановили файли cookie спочатку:$.removeCookie('nameofcookie', { path: '/' });
LessQuesar

30
Настав 2015 рік, і ми все ще отримуємо більше 2 тис. Унікальних звернень на тиждень у сховищі jquery-cookie саме з цієї відповіді. Кілька речей, з яких ми можемо дізнатися: 1. файли cookie не скоро помруть і 2. Люди все ще гугл для "плагін jquery, щоб врятувати світ". jQuery НЕ потрібен для обробки файлів cookie, jquery-cookie перейменовується на js-cookie ( github.com/js-cookie/js-cookie ), а залежність jquery стала необов'язковою у версії 1.5.0. Буде версія 2.0.0 з великою кількістю цікавих речей, варто подивитися і внести свій внесок, thx!
Фагнер Брек

2
@Kazar Ми не плануємо його фізично переміщувати, є значна кількість загального трафіку до цієї URL-адреси з кількох джерел, і Клаус є історичним власником простору імен "jquery-cookie". Не потрібно хвилюватися за те, що ця URL-адреса незабаром піде. Але все ж, я б закликав усіх почати перегляд оновлених сховищ.
Фагнер Брек

429

Немає необхідності використовувати jQuery особливо для маніпулювання файлами cookie.

Від QuirksMode (включаючи втечі символів)

function createCookie(name, value, days) {
    var expires;

    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        expires = "; expires=" + date.toGMTString();
    } else {
        expires = "";
    }
    document.cookie = encodeURIComponent(name) + "=" + encodeURIComponent(value) + expires + "; path=/";
}

function readCookie(name) {
    var nameEQ = encodeURIComponent(name) + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) === ' ')
            c = c.substring(1, c.length);
        if (c.indexOf(nameEQ) === 0)
            return decodeURIComponent(c.substring(nameEQ.length, c.length));
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name, "", -1);
}

Подивись на


2
Привіт Руссе, добре про файли cookie jquery, це те, що вони уникають даних
Светослав Маринов,

2
@lordspace - Просто загорніть значення у window.escape / unescape, щоб написати / отримати значення файлу cookie відповідно :)
Russ Cam

46
Кращий код файлу cookie можна знайти тут: developer.mozilla.org/uk/DOM/document.cookie
SDC

3
плагін cookie jQuery набагато простіше
brauliobo

1
замість втечі чи невидимки ви можете використовувати encodeURI або decodeURI
Moldovan

143
<script type="text/javascript">
    function setCookie(key, value, expiry) {
        var expires = new Date();
        expires.setTime(expires.getTime() + (expiry * 24 * 60 * 60 * 1000));
        document.cookie = key + '=' + value + ';expires=' + expires.toUTCString();
    }

    function getCookie(key) {
        var keyValue = document.cookie.match('(^|;) ?' + key + '=([^;]*)(;|$)');
        return keyValue ? keyValue[2] : null;
    }

    function eraseCookie(key) {
        var keyValue = getCookie(key);
        setCookie(key, keyValue, '-1');
    }

</script>

Ви можете встановити печиво так, як

setCookie('test','1','1'); //(key,value,expiry in days)

Ви можете дістати печиво так, як

getCookie('test');

І нарешті ви можете стерти печиво, як це

eraseCookie('test');

Сподіваюся, це комусь допоможе :)

Редагувати:

Якщо ви хочете встановити файл cookie на весь шлях / сторінку / каталог, тоді встановіть атрибут шляху до файлу cookie

function setCookie(key, value, expiry) {
        var expires = new Date();
        expires.setTime(expires.getTime() + (expiry * 24 * 60 * 60 * 1000));
        document.cookie = key + '=' + value + ';path=/' + ';expires=' + expires.toUTCString();
}

Спасибі, вікі


1
60 * 1000 = 60 секунд 60 * (60 * 1000) = 60 хвилин, що становить 1 годину 24 * (60 * (60 * 1000)) = 1 день, який 24 години сподіваюся, що це допомагає.
Vignesh Pichamani

1
1 * 24 * 60 * 60 * 1000 налаштувати 1 на 1 день або ти можеш зробити 365
Vignesh Pichamani

1
Хороші функції ... Але чому вони знаходяться всередині тегу document.ready?
Dss

1
Це не буде працювати в Safari або IE для будь-яких символів, що знаходяться за межами діапазону ASCII, таких як é, тощо. Рекомендую наступне посилання: tools.ietf.org/html/rfc6265
Fagner Brack


13

Ось мій глобальний модуль, який я використовую -

var Cookie = {   

   Create: function (name, value, days) {

       var expires = "";

        if (days) {
           var date = new Date();
           date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
           expires = "; expires=" + date.toGMTString();
       }

       document.cookie = name + "=" + value + expires + "; path=/";
   },

   Read: function (name) {

        var nameEQ = name + "=";
        var ca = document.cookie.split(";");

        for (var i = 0; i < ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0) == " ") c = c.substring(1, c.length);
            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
        }

        return null;
    },

    Erase: function (name) {

        Cookie.create(name, "", -1);
    }

};

10

Переконайтеся, що не робити щось подібне:

var a = $.cookie("cart").split(",");

Тоді, якщо файлу cookie не існує, налагоджувач поверне некорисне повідомлення на зразок ".cookie не функція".

Завжди декларуйте спочатку, а потім зробіть розділення після перевірки на null. Подобається це:

var a = $.cookie("cart");
if (a != null) {
    var aa = a.split(",");

Зразок коду не повний. Це лише один }, якого немає, або немає кількох рядків коду?
Пітер Мортенсен

Це просто singe} відсутній, але очевидно, вам потрібно буде додати більше рядків коду, щоб продовжити те, що ви хочете зробити з розділенням.
користувач890332

8

Ось як встановити файл cookie за допомогою JavaScript:

нижче код взятий з https://www.w3schools.com/js/js_cookies.asp

function setCookie(cname, cvalue, exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays*24*60*60*1000));
    var expires = "expires="+ d.toUTCString();
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

тепер ви можете отримати печиво з функцією нижче:

function getCookie(cname) {
    var name = cname + "=";
    var decodedCookie = decodeURIComponent(document.cookie);
    var ca = decodedCookie.split(';');
    for(var i = 0; i <ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') {
            c = c.substring(1);
        }
        if (c.indexOf(name) == 0) {
            return c.substring(name.length, c.length);
        }
    }
    return "";
}

І нарешті, ось як ви перевіряєте файл cookie:

function checkCookie() {
    var username = getCookie("username");
    if (username != "") {
        alert("Welcome again " + username);
    } else {
        username = prompt("Please enter your name:", "");
        if (username != "" && username != null) {
            setCookie("username", username, 365);
        }
    }
}

Якщо ви хочете видалити файл cookie, просто встановіть параметр закінчується на минуту дату:

document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";

7

Простий приклад встановлення файлу cookie у вашому браузері:

<!doctype html>
<html>
    <head>
        <meta charset="utf-8">
        <title>jquery.cookie Test Suite</title>

        <script src="jquery-1.9.0.min.js"></script>
        <script src="jquery.cookie.js"></script>
        <script src="JSON-js-master/json.js"></script>
        <script src="JSON-js-master/json_parse.js"></script>
        <script>
            $(function() {

               if ($.cookie('cookieStore')) {
                    var data=JSON.parse($.cookie("cookieStore"));
                    $('#name').text(data[0]);
                    $('#address').text(data[1]);
              }

              $('#submit').on('click', function(){

                    var storeData = new Array();
                    storeData[0] = $('#inputName').val();
                    storeData[1] = $('#inputAddress').val();

                    $.cookie("cookieStore", JSON.stringify(storeData));
                    var data=JSON.parse($.cookie("cookieStore"));
                    $('#name').text(data[0]);
                    $('#address').text(data[1]);
              });
            });

       </script>
    </head>
    <body>
            <label for="inputName">Name</label>
            <br /> 
            <input type="text" id="inputName">
            <br />      
            <br /> 
            <label for="inputAddress">Address</label>
            <br /> 
            <input type="text" id="inputAddress">
            <br />      
            <br />   
            <input type="submit" id="submit" value="Submit" />
            <hr>    
            <p id="name"></p>
            <br />      
            <p id="address"></p>
            <br />
            <hr>  
     </body>
</html>

Просто скопіюйте та вставте та використовуйте цей код для встановлення файлу cookie.


1
Лише зауваження, браузер за замовчуванням кешує ресурси відповідно до їхніх імен. У цьому прикладі jquery-1.9.0.min.jsбуде перезавантажено для всіх, коли ім'я файлу буде оновлено jquery-1.9.1.min.js, інакше браузер НЕ подавати запит на сервер, щоб перевірити оновлений вміст. Якщо ви оновите код всередині, jquery.cookie.jsне змінюючи ім'я файлу, він може НЕ перезавантажуватися в браузерах, які вже кешували jquery.cookie.jsресурс.
Fagner Brack

Якщо ви пишете веб-сайт і копіюєте / вставляєте це, пам’ятайте, що це не спрацює, якщо ви оновлюєте jquery.cookie.jsверсію без зміни свого імені файлу (якщо тільки ваш сервер не займається кешуванням за допомогою E-Tags).
Fagner Brack

if ($ .cookie ('cookieStore')) {var data = JSON.parse ($. cookie ("cookieStore")); // при завантаженні сторінки на іншій сторінці не знайдено $ ('# ім'я') .тексту (дані [0]); $ ('# address') .тексту (дані [1]); }
Мохаммед Джавад

5

Ви можете використовувати бібліотеку на веб-сайті Mozilla тут

Ви зможете встановити та отримати такі файли cookie

docCookies.setItem(name, value);
docCookies.getItem(name);

3

Я думаю, що Фрешер дав нам хороший шлях, але є помилка:

    <script type="text/javascript">
        function setCookie(key, value) {
            var expires = new Date();
            expires.setTime(expires.getTime() + (value * 24 * 60 * 60 * 1000));
            document.cookie = key + '=' + value + ';expires=' + expires.toUTCString();
        }

        function getCookie(key) {
            var keyValue = document.cookie.match('(^|;) ?' + key + '=([^;]*)(;|$)');
            return keyValue ? keyValue[2] : null;
        }
   </script>

Ви повинні додати "значення" біля getTime (); інакше файл cookie закінчується негайно :)


2
"значення" може бути рядком. У запитанні він використовує 1 як приклад. Значення має бути рівним ключу, а не тривалістю в днях до закінчення терміну дії файлу cookie. Якщо значення було передано як "foo", ваша версія вийде з ладу.
Пітер

1

Я вважав , що відповідь Віньєша Пічамані була найпростішою та найяснішою. Просто додавши до нього можливість встановити кількість днів до закінчення терміну дії:

Редагувати: також додано опцію "ніколи не закінчується", якщо номер дня не встановлений

        function setCookie(key, value, days) {
            var expires = new Date();
            if (days) {
                expires.setTime(expires.getTime() + (days * 24 * 60 * 60 * 1000));
                document.cookie = key + '=' + value + ';expires=' + expires.toUTCString();
            } else {
                document.cookie = key + '=' + value + ';expires=Fri, 30 Dec 9999 23:59:59 GMT;';
            }
        }

        function getCookie(key) {
            var keyValue = document.cookie.match('(^|;) ?' + key + '=([^;]*)(;|$)');
            return keyValue ? keyValue[2] : null;
        }

Встановити файл cookie:

setCookie('myData', 1, 30); // myData=1 for 30 days. 
setCookie('myData', 1); // myData=1 'forever' (until the year 9999) 

1

Я знаю, що існує багато чудових відповідей. Часто мені потрібно лише читати файли cookie, і я не хочу створювати накладні, завантажуючи додаткові бібліотеки або визначаючи функції.

Ось як читати куки в одному рядку JavaScript . Я знайшов відповідь у статті блогу Гільхерма Родрігеса :

('; '+document.cookie).split('; '+key+'=').pop().split(';').shift()

Це означає, що печиво називається keyприємним, чистим і простим.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.