ฉันจะตั้งค่า / ยกเลิกการตั้งค่าคุกกี้ด้วย jQuery ได้อย่างไร


คำตอบ:


1767

อัปเดตเมษายน 2019

jQuery ไม่จำเป็นสำหรับการอ่าน / การจัดการคุกกี้ดังนั้นอย่าใช้คำตอบดั้งเดิมด้านล่าง

ไปที่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("test", 1, { expires : 10 });

หากไม่ใช้ตัวเลือกหมดอายุคุกกี้จะกลายเป็นคุกกี้เซสชันและจะถูกลบออกเมื่อเบราว์เซอร์ออก

เพื่อครอบคลุมตัวเลือกทั้งหมด:

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

วิธีอ่านคุณค่าของคุกกี้:

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

คุณอาจต้องการระบุพารามิเตอร์พา ธ หากคุกกี้ถูกสร้างขึ้นบนพา ธ อื่นไปยังปัจจุบัน:

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

อัปเดต (เมษายน 2558):

ดังที่ระบุไว้ในความคิดเห็นด้านล่างทีมที่ทำงานกับปลั๊กอินเดิมได้ลบการพึ่งพา jQuery ในโครงการใหม่ ( https://github.com/js-cookie/js-cookie ) ซึ่งมีฟังก์ชันและไวยากรณ์ทั่วไปเช่นเดียวกับ รุ่น jQuery เห็นได้ชัดว่าปลั๊กอินดั้งเดิมไม่ได้ไปที่ใดก็ได้


1
จากรายการเปลี่ยนแปลง: "$ .removeCookie ('foo') สำหรับการลบคุกกี้โดยใช้ $ .cookie ('foo', null) เลิกใช้แล้ว"
bogdan

68
@Kazar ฉันใช้เวลา 6 ชั่วโมงไม่มีหยุดพัก ในที่สุดฉันก็รู้ปัญหาเมื่อเช้านี้ ฉันใช้มันกับ phonegap บนเว็บไซต์มันทำงานได้อย่างไม่มีปัญหา แต่บนอุปกรณ์เมื่อคุณพยายามที่จะดึงคุกกี้ที่มี JSON มันเป็นวัตถุอยู่แล้วดังนั้นหากคุณพยายามที่จะ JSON.parse มัน จะให้ข้อผิดพลาดในการแยกวิเคราะห์ JSON แก้ไขด้วย "ถ้า typeof x == 'string'" ทำ JSON.parse มิฉะนั้นให้ใช้อ็อบเจกต์ 6 ชั่วโมง goddamn มองหาข้อผิดพลาดในทุกสถานที่ที่ไม่ถูกต้อง
Andrei Cristian Prodan

10
เมื่อลบคุกกี้ตรวจสอบให้แน่ใจว่าได้ตั้งเส้นทางไปยังเส้นทางเดียวกันกับที่คุณตั้งค่าคุกกี้ไว้ตั้งแต่แรกแล้ว:$.removeCookie('nameofcookie', { path: '/' });
LessQuesar

30
มันคือปี 2015 และเรายังคงได้รับความนิยมมากกว่า 2k ต่อสัปดาห์ใน jquery-cookie repository จากคำตอบนี้ สองสิ่งที่เราสามารถเรียนรู้ได้จาก: 1. คุกกี้จะไม่ตายในไม่ช้าและ 2. ผู้คนยังคงใช้ Google เป็น "jquery plugin เพื่อช่วยโลก" jQuery ไม่จำเป็นสำหรับการจัดการคุกกี้ jquery-cookie กำลังถูกเปลี่ยนชื่อเป็น js-cookie ( github.com/js-cookie/js-cookie ) และการพึ่งพา jquery นั้นเป็นทางเลือกในเวอร์ชัน 1.5.0 จะมีเวอร์ชั่น 2.0.0 พร้อมสิ่งที่น่าสนใจมากมายมันคุ้มค่าที่จะดูและมีส่วนร่วมขอบคุณ!
Fagner Brack

2
@Kazar เราไม่ได้วางแผนที่จะย้ายมันมีจำนวนการเข้าชมโดยรวมไปยัง URL นั้นจากหลายแหล่งและ Klaus เป็นเจ้าของประวัติศาสตร์ของเนมสเปซ "jquery-cookie" ไม่จำเป็นต้องกังวลว่า URL นั้นจะหายไปทุกเวลาเร็ว ๆ นี้ แต่ถึงกระนั้นฉันจะสนับสนุนให้ทุกคนเริ่มดูที่เก็บใหม่สำหรับการปรับปรุง
Fagner Brack

429

ไม่จำเป็นต้องใช้ jQuery โดยเฉพาะเพื่อจัดการคุกกี้

จาก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
สวัสดีรัสสิ่งที่ดีเกี่ยวกับคุกกี้ jquery คือมันหนีข้อมูล
Svetoslav Marinov

2
@lordspace - เพียงแค่ตัดค่าใน window.escape / unescape เพื่อเขียน / ดึงค่าคุกกี้ตามลำดับ :)
Russ Cam

46
รหัสคุกกี้ที่ดีขึ้นสามารถพบได้ที่นี่: developer.mozilla.org/en/DOM/document.cookie
SDC

3
ปลั๊กอินคุกกี้ jQuery นั้นง่ายกว่ามาก
brauliobo

1
แทนที่จะหลบหนีหรือ unescape คุณสามารถใช้ encodeURI หรือ 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>

คุณสามารถตั้งค่าคุกกี้ได้ตามชอบ

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

คุณสามารถรับคุกกี้ได้ตามชอบ

getCookie('test');

และในที่สุดคุณก็สามารถลบคุกกี้แบบนี้ได้

eraseCookie('test');

หวังว่ามันจะช่วยให้ใครบางคน :)

แก้ไข:

หากคุณต้องการตั้งค่าคุกกี้เป็นเส้นทาง / หน้า / ไดเรกทอรีทั้งหมดให้ตั้งค่าแอตทริบิวต์เส้นทางเป็นคุกกี้

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

ขอบคุณ vicky


1
60 * 1000 = 60 วินาที 60 * (60 * 1,000) = 60 นาทีซึ่งเป็น 1 ชั่วโมง 24 * (60 * (60 * 1,000)) = 1 วันซึ่ง 24 ชั่วโมงหวังว่าจะช่วยได้
Vignesh Pichamani

1
1 * 24 * 60 * 60 * 1,000 ปรับแต่ง 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 not a function"

ประกาศก่อนเสมอจากนั้นทำการแยกหลังจากตรวจสอบค่าว่าง แบบนี้:

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

รหัสตัวอย่างไม่สมบูรณ์ มันเป็นเพียงหนึ่งเดียว}ที่ขาดหายไปหรือมีหลายบรรทัดของรหัสหายไป?
Peter Mortensen

มันหายไปเพียง singe} แต่แน่นอนว่าคุณจะต้องเพิ่มบรรทัดของโค้ดเพิ่มเติมเพื่อทำสิ่งที่คุณต้องการแยกต่อไป
user890332

8

นี่คือวิธีที่คุณตั้งค่าคุกกี้ด้วย 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 "";
}

และในที่สุดนี่คือวิธีที่คุณตรวจสอบคุกกี้:

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

หากคุณต้องการลบคุกกี้เพียงตั้งค่าพารามิเตอร์ expires เป็นวันที่ผ่าน:

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

7

ตัวอย่างง่ายๆของการตั้งค่าคุกกี้ในเบราว์เซอร์ของคุณ:

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

ง่าย ๆ เพียงแค่คัดลอก / วางและใช้รหัสนี้เพื่อตั้งค่าคุกกี้ของคุณ


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")); // เมื่อโหลดหน้าในหน้าอื่นไม่พบ $ ('# name') ข้อความ (data [0]); . $ ( '# ที่อยู่') ข้อความ (ข้อมูล [1]); }
Mohammad Javad

5

คุณสามารถใช้ห้องสมุดบนเว็บไซต์ Mozilla ได้ที่นี่

คุณจะสามารถตั้งค่าและรับคุกกี้เช่นนี้

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

3

ฉันคิดว่า Fresher ให้วิธีที่ดีกับเรา แต่มีข้อผิดพลาด:

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

คุณควรเพิ่ม "value" ใกล้ getTime (); มิฉะนั้นคุกกี้จะหมดอายุทันที :)


2
"value" อาจเป็นสตริง ในคำถามที่เขาใช้ 1 เป็นตัวอย่าง ค่าควรเป็นสิ่งที่สำคัญเท่ากับไม่ใช่ความยาวเป็นวันก่อนที่คุกกี้จะหมดอายุ หากค่าถูกส่งเป็น "foo" เวอร์ชันของคุณจะมีปัญหา
ปีเตอร์

1

ฉันคิดว่าคำตอบของVignesh Pichamaniนั้นง่ายและสะอาดที่สุด เพียงเพิ่มความสามารถของเขาในการกำหนดจำนวนวันก่อนวันหมดอายุ:

แก้ไข: เพิ่มตัวเลือก 'ไม่หมดอายุ' หากไม่มีการตั้งค่าหมายเลขวัน

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

ตั้งค่าคุกกี้:

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

1

ฉันรู้ว่ามีคำตอบที่ดีมากมาย บ่อยครั้งที่ฉันต้องอ่านคุกกี้เท่านั้นและฉันไม่ต้องการสร้างค่าใช้จ่ายโดยการโหลดไลบรารีเพิ่มเติมหรือกำหนดฟังก์ชัน

นี่คือวิธีการอ่านคุกกี้ในหนึ่งบรรทัดของ JavaScript ฉันพบคำตอบในบทความบล็อกของ Guilherme Rodrigues :

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

สิ่งนี้จะอ่านชื่อคุกกี้keyดีสะอาดและเรียบง่าย


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.