Làm cách nào để đặt / hủy đặt cookie với jQuery?


1244

Làm cách nào để đặt và hủy đặt cookie bằng jQuery, ví dụ: tạo cookie có tên testvà đặt giá trị thành 1?

Câu trả lời:


1767

Cập nhật tháng 4 năm 2019

jQuery không cần thiết cho việc đọc / thao tác cookie, vì vậy đừng sử dụng câu trả lời ban đầu bên dưới.

Thay vào đó, hãy truy cập https://github.com/js-cookie/js-cookie và sử dụng thư viện không phụ thuộc vào jQuery.

Ví dụ cơ bản:

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

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

Xem các tài liệu trên github để biết chi tiết.


Xem plugin:

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

Sau đó bạn có thể làm:

$.cookie("test", 1);

Xóa:

$.removeCookie("test");

Ngoài ra, để đặt thời gian chờ của một số ngày nhất định (10 tại đây) trên cookie:

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

Nếu tùy chọn hết hạn bị bỏ qua, thì cookie sẽ trở thành cookie phiên và bị xóa khi trình duyệt thoát.

Để bao gồm tất cả các tùy chọn:

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

Để đọc lại giá trị của cookie:

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

Bạn có thể muốn chỉ định tham số đường dẫn nếu cookie được tạo trên một đường dẫn khác với đường dẫn hiện tại:

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

CẬP NHẬT (Tháng 4 năm 2015):

Như đã nêu trong các bình luận bên dưới, nhóm làm việc với plugin ban đầu đã loại bỏ sự phụ thuộc jQuery trong một dự án mới ( https://github.com/js-cookie/js-cookie ) có cùng chức năng và cú pháp chung như phiên bản jQuery. Rõ ràng các plugin ban đầu không đi đâu cả.


1
từ thay đổi: "$ .removeCookie ('foo') để xóa cookie, sử dụng $ .cookie ('foo', null) hiện không được chấp nhận"
bogdan

68
@Kazar Mình đã dành 6 tiếng, không nghỉ. Cuối cùng tôi đã nhận ra vấn đề sáng nay. Tôi đang sử dụng điều này với phonegap, trên trang web nó không hoạt động, nhưng trên thiết bị, khi bạn cố gắng truy xuất cookie có JSON, nó đã là một đối tượng, vì vậy nếu bạn cố gắng JSON. sẽ đưa ra một lỗi phân tích JSON. Đã giải quyết nó bằng "if typeof x == 'string'", hãy thực hiện JSON.parse, chỉ cần sử dụng đối tượng. 6 giờ chết tiệt tìm kiếm lỗi ở tất cả các vị trí sai
Andrei Cristian Prodan

10
khi xóa cookie, hãy đảm bảo cũng đặt đường dẫn đến cùng một đường dẫn như bạn đã đặt cookie ban đầu:$.removeCookie('nameofcookie', { path: '/' });
LessQuesar

30
Đó là năm 2015 và chúng tôi vẫn nhận được hơn 2 nghìn lượt truy cập mỗi tuần trong kho lưu trữ cookie jquery-cookie chỉ từ câu trả lời này. Một vài điều chúng ta có thể học được từ đó: 1. cookie sẽ không chết sớm và 2. Mọi người vẫn google cho một "plugin jquery để cứu thế giới". jQuery không cần thiết để xử lý cookie, jquery-cookie đang được đổi tên thành js-cookie ( github.com/js-cookie/js-cookie ) và phụ thuộc jquery được tùy chọn trong phiên bản 1.5.0. Sẽ có một phiên bản 2.0.0 với rất nhiều thứ thú vị, đáng để xem và đóng góp, thx!
Fagner Brack

2
@Kazar Chúng tôi không có kế hoạch di chuyển vật lý, có một lượng đáng kể lưu lượng truy cập đến URL đó từ một số nguồn và Klaus là chủ sở hữu lịch sử của không gian tên "jquery-cookie". Không cần phải lo lắng về việc URL đó sẽ sớm bị loại bỏ. Tuy nhiên, tôi vẫn khuyến khích mọi người bắt đầu xem kho lưu trữ mới để cập nhật.
Fagner Brack

429

Không cần sử dụng jQuery đặc biệt để thao tác cookie.

Từ QuirksMode (bao gồm các ký tự thoát)

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

Hãy xem


2
Xin chào Russ, cái hay của cookie jquery là nó thoát được dữ liệu
Svetoslav Marinov

2
@lordspace - Chỉ cần bọc giá trị trong window.escape / unescape để ghi / truy xuất giá trị cookie, tương ứng :)
Russ Cam

46
Mã cookie tốt hơn có thể được tìm thấy ở đây: developer.mozilla.org/en/DOM/document.cookie
SDC

3
plugin cookie jQuery đơn giản hơn nhiều
brauliobo

1
thay vì thoát hoặc bỏ cảnh, bạn có thể sử dụng encodeURI hoặc decodeURI
Rodislav 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>

Bạn có thể đặt cookie như thế nào

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

Bạn có thể lấy cookie như

getCookie('test');

Và cuối cùng bạn có thể xóa các cookie như thế này

eraseCookie('test');

Hy vọng nó sẽ giúp được ai đó :)

BIÊN TẬP:

Nếu bạn muốn đặt cookie cho tất cả thư mục đường dẫn / trang / thì hãy đặt thuộc tính đường dẫn cho 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();
}

Cảm ơn, vicky


1
60 * 1000 = 60 giây 60 * (60 * 1000) = 60 phút tức là 1 giờ 24 * (60 * (60 * 1000)) = 1 ngày mà 24 giờ Hy vọng điều đó có ích.
Vignesh Pichamani

1
1 * 24 * 60 * 60 * 1000 tùy chỉnh 1 trong 1 ngày hoặc bạn có thể thực hiện 365
Vignesh Pichamani

1
Các chức năng tốt ... Nhưng tại sao chúng lại nằm trong thẻ document. Yet?
Dss

1
Điều này sẽ không hoạt động trong Safari hoặc IE cho bất kỳ ký tự nào ngoài phạm vi ASCII, chẳng hạn như é, v.v. Ngoài ra, điều này sẽ không hoạt động đối với một số ký tự đặc biệt không được phép trong tên cookie hoặc giá trị cookie. Tôi khuyên bạn nên tham khảo sau: tools.ietf.org/html/rfc6265
Fagner Brack


13

Đây là mô-đun toàn cầu của tôi, tôi sử dụng -

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

Đảm bảo không làm điều gì đó như thế này:

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

Sau đó, nếu cookie không tồn tại, trình gỡ lỗi sẽ trả về một số thông báo không có ích như ".cookie không phải là một chức năng".

Luôn luôn khai báo trước, sau đó thực hiện phân tách sau khi kiểm tra null. Như thế này:

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

Mã mẫu không đầy đủ. Có phải nó chỉ }thiếu một hoặc thiếu một vài dòng mã?
Peter Mortensen

Nó chỉ là một thiếu sót}, nhưng rõ ràng bạn sẽ cần thêm nhiều dòng mã hơn để tiếp tục những gì bạn muốn làm với phần tách.
dùng89032

8

Đây là cách bạn đặt cookie với JavaScript:

mã bên dưới đã được lấy từ 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=/";
}

bây giờ bạn có thể lấy cookie với chức năng dưới đây:

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

Và cuối cùng đây là cách bạn kiểm tra 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);
        }
    }
}

Nếu bạn muốn xóa cookie, chỉ cần đặt tham số hết hạn thành ngày đã qua:

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

7

Một ví dụ đơn giản về đặt cookie trong trình duyệt của bạn:

<!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>

Đơn giản chỉ cần sao chép / dán và sử dụng mã này để đặt cookie của bạn.


1
Chỉ cần một lưu ý, trình duyệt theo mặc định lưu trữ các tài nguyên theo tên tệp của chúng. Trong ví dụ này, jquery-1.9.0.min.jssẽ được tải lại cho mọi người khi tên tệp được cập nhật jquery-1.9.1.min.js, nếu không trình duyệt sẽ hoàn toàn không yêu cầu máy chủ kiểm tra nội dung cập nhật. Nếu bạn cập nhật mã bên trong jquery.cookie.jsmà không thay đổi tên tệp, thì nó có thể KHÔNG được tải lại trong các trình duyệt đã lưu trữ jquery.cookie.jstài nguyên.
Fagner Brack

Nếu bạn đang viết một trang web và sao chép / dán cái này, hãy lưu ý rằng nó sẽ không hoạt động nếu bạn cập nhật jquery.cookie.jsphiên bản mà không thay đổi tên tệp của nó (trừ khi máy chủ của bạn xử lý bộ đệm ẩn bằng E-Tags).
Fagner Brack

if ($ .cookie ('cookieStore')) {var data = JSON.parse ($. cookie ("cookieStore")); // khi tải trang ở các trang khác nhau không tìm thấy $ ('# name'). text (data [0]); $ ('# địa chỉ'). văn bản (dữ liệu [1]); }
Mohammad Javad

5

Bạn có thể sử dụng thư viện trên trang web Mozilla tại đây

Bạn sẽ có thể đặt và nhận cookie như thế này

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

3

Tôi nghĩ Fresher đã cho chúng ta cách tốt đẹp, nhưng có một sai lầm:

    <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>

Bạn nên thêm "giá trị" gần getTime (); nếu không thì cookie sẽ hết hạn ngay lập tức :)


2
"Giá trị" có thể là một chuỗi. Trong câu hỏi, anh ấy sử dụng 1 làm ví dụ. Giá trị phải là những gì khóa bằng, không phải là độ dài tính bằng ngày trước khi cookie hết hạn. Nếu giá trị được chuyển vào là "foo" thì phiên bản của bạn sẽ bị sập.
Peter

1

Tôi nghĩ Vignesh Pichamani câu trả lời của là đơn giản và sạch sẽ nhất. Chỉ cần thêm vào khả năng của mình để đặt số ngày trước khi hết hạn:

EDIT: cũng đã thêm tùy chọn 'không bao giờ hết hạn' nếu không đặt số ngày

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

Đặt cookie:

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

1

Tôi biết có rất nhiều câu trả lời tuyệt vời. Thông thường, tôi chỉ cần đọc cookie và tôi không muốn tạo ra chi phí bằng cách tải thêm thư viện hoặc xác định chức năng.

Đây là cách đọc cookie trong một dòng javascript . Tôi tìm thấy câu trả lời trong bài viết trên blog của Guilherme Coleues :

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

Điều này đọc cookie có tên key, đẹp, sạch sẽ và đơn giản.


-1
$.cookie("test", 1); //set cookie
$.cookie("test"); //get cookie
$.cookie('test', null); //delete cookie
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.