Come posso impostare / annullare l'impostazione di un cookie con jQuery?


1244

Come posso impostare e annullare l'impostazione di un cookie utilizzando jQuery, ad esempio creare un cookie denominato teste impostare il valore su 1?

Risposte:


1767

Aggiornamento aprile 2019

jQuery non è necessario per la lettura / manipolazione dei cookie, quindi non utilizzare la risposta originale di seguito.

Vai invece a https://github.com/js-cookie/js-cookie e usa la libreria lì che non dipende da jQuery.

Esempi di base:

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

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

Vedi i documenti su Github per i dettagli.


Vedi il plugin:

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

È quindi possibile fare:

$.cookie("test", 1);

Cancellare:

$.removeCookie("test");

Inoltre, per impostare un timeout di un certo numero di giorni (10 qui) sul cookie:

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

Se l'opzione di scadenza è omessa, il cookie diventa un cookie di sessione e viene eliminato all'uscita dal browser.

Per coprire tutte le opzioni:

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

Per rileggere il valore del cookie:

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

Potresti voler specificare il parametro path se il cookie è stato creato su un percorso diverso da quello corrente:

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

AGGIORNAMENTO (aprile 2015):

Come indicato nei commenti seguenti, il team che ha lavorato al plug-in originale ha rimosso la dipendenza jQuery in un nuovo progetto ( https://github.com/js-cookie/js-cookie ) che ha le stesse funzionalità e sintassi generale di la versione jQuery. Apparentemente il plugin originale non sta andando da nessuna parte però.


1
dal log delle modifiche: "$ .removeCookie ('foo') per l'eliminazione di un cookie, utilizzando $ .cookie ('foo', null) è ora deprecato"
bogdan

68
@Kazar Ho trascorso 6 ore, niente pause. Ho finalmente capito il problema questa mattina. Sto usando questo con phonegap, sul sito funziona senza problemi, ma sul dispositivo, quando provi a recuperare il cookie che ha un JSON, è già un oggetto, quindi se provi a JSON. genererà un errore di analisi JSON. Risolto con un "if typeof x == 'string'" fare il JSON.parse, altrimenti, basta usare l'oggetto. 6 dannate ore alla ricerca dell'errore in tutti i posti sbagliati
Andrei Cristian Prodan,

10
quando rimuovi il cookie, assicurati di impostare anche il percorso sullo stesso percorso in cui hai impostato il cookie originariamente:$.removeCookie('nameofcookie', { path: '/' });
LessQuesar

30
È il 2015 e stiamo ancora ricevendo più di 2k hit unici a settimana nel repository jquery-cookie proprio da questa risposta. Un paio di cose che possiamo imparare da questo: 1. i cookie non moriranno presto e 2. Le persone continuano a cercare Google per un "plugin jquery per salvare il mondo". jQuery NON è necessario per la gestione dei cookie, jquery-cookie viene rinominato in js-cookie ( github.com/js-cookie/js-cookie ) e la dipendenza jquery è stata resa facoltativa nella versione 1.5.0. Ci sarà una versione 2.0.0 con molte cose interessanti, vale la pena dare un'occhiata e contribuire, grazie!
Fagner Brack,

2
@Kazar Non stiamo pianificando di spostarlo fisicamente, c'è una notevole quantità di traffico complessivo verso quell'URL da diverse fonti e Klaus è il proprietario storico dello spazio dei nomi "jquery-cookie". Non è necessario preoccuparsi che l'URL scompaia presto. Tuttavia, incoraggerei tutti a iniziare a guardare il nuovo repository per gli aggiornamenti.
Fagner Brack,

429

Non è necessario utilizzare jQuery in particolare per manipolare i cookie.

Da QuirksMode (inclusi i caratteri di escape)

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

Date un'occhiata al


2
Ciao Russ, il bello del cookie jquery è che sfugge ai dati
Svetoslav Marinov,

2
@lordspace - Basta racchiudere il valore in window.escape / unescape per scrivere / recuperare rispettivamente il valore del cookie :)
Russ Cam

46
Un codice cookie migliore può essere trovato qui: developer.mozilla.org/en/DOM/document.cookie
SDC

3
il plugin per cookie jQuery è molto più semplice
brauliobo

1
invece di scappare o annullare la fuga puoi usare encodeURI o 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>

Puoi impostare i cookie come piace

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

Puoi ottenere i biscotti come piace

getCookie('test');

E infine puoi cancellare i cookie come questo

eraseCookie('test');

Spero che possa aiutare qualcuno :)

MODIFICARE:

Se si desidera impostare il cookie su tutto il percorso / pagina / directory, impostare l'attributo percorso sul 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();
}

Grazie vicky


1
60 * 1000 = 60 secondi 60 * (60 * 1000) = 60 minuti, ovvero 1 ora 24 * (60 * (60 * 1000)) = 1 giorno, 24 ore Spero che sia d'aiuto.
Vignesh Pichamani,

1
1 * 24 * 60 * 60 * 1000 personalizza 1 per 1 giorno oppure puoi fare 365
Vignesh Pichamani

1
Buone funzioni ... Ma perché sono all'interno di un tag document.ready?
Dss,

1
Questo non funzionerà in Safari o IE per nessun personaggio al di fuori dell'intervallo ASCII, come é, ecc. Inoltre, non funzionerà per alcuni caratteri speciali che non sono ammessi nel nome del cookie o nel valore del cookie. Consiglio il seguente riferimento: tools.ietf.org/html/rfc6265
Fagner Brack


13

Ecco il mio modulo globale che uso -

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

Assicurati di non fare qualcosa del genere:

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

Quindi, se il cookie non esiste, il debugger restituirà un messaggio inutile come ".cookie not a function".

Dichiarare sempre prima, quindi eseguire la divisione dopo aver verificato la presenza di null. Come questo:

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

Il codice di esempio non è completo. }Manca solo un singolo o mancano diverse righe di codice?
Peter Mortensen,

Manca solo un singolo}, ma ovviamente dovrai aggiungere più righe di codice per continuare quello che vuoi fare con la divisione.
user890332

8

Ecco come impostare i cookie con JavaScript:

il codice seguente è stato preso da 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=/";
}

ora puoi ottenere i cookie con la seguente funzione:

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

E finalmente è così che controlli il 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);
        }
    }
}

Se si desidera eliminare il cookie, impostare il parametro expires su una data trascorsa:

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

7

Un semplice esempio di cookie impostato nel tuo browser:

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

Semplicemente copia / incolla e usa questo codice per impostare il tuo cookie.


1
Solo una nota, il browser di default memorizza nella cache le risorse in base ai loro nomi di file. In questo esempio, jquery-1.9.0.min.jsverrà ricaricato per tutti quando il nome file viene aggiornato jquery-1.9.1.min.js, altrimenti il ​​browser NON farà alcuna richiesta al server per verificare il contenuto aggiornato. Se aggiorni il codice all'interno jquery.cookie.jssenza modificarne il nome file, potrebbe NON essere ricaricato nei browser che hanno già memorizzato nella cache la jquery.cookie.jsrisorsa.
Fagner Brack,

Se stai scrivendo un sito Web e copiandolo / incollandolo, tieni presente che non funzionerà se aggiorni la jquery.cookie.jsversione senza modificarne il nome file (a meno che il tuo server non gestisca la memorizzazione nella cache utilizzando gli E-tag).
Fagner Brack,

if ($ .cookie ('cookieStore')) {var data = JSON.parse ($. cookie ("cookieStore")); // quando la pagina di caricamento in una pagina diversa non viene trovata $ ('# nome'). testo (dati [0]); . $ ( '#' indirizzo') testo (dati [1]); }
Mohammad Javad,

5

È possibile utilizzare la libreria sul sito Web Mozilla qui

Sarai in grado di impostare e ottenere cookie in questo modo

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

3

Penso che Fresher ci abbia dato un buon modo, ma c'è un errore:

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

È necessario aggiungere "valore" vicino a getTime (); altrimenti il ​​cookie scadrà immediatamente :)


2
"valore" potrebbe essere una stringa. Nella domanda usa 1 come esempio. Il valore deve corrispondere alla chiave, non alla lunghezza in giorni prima della scadenza del cookie. Se il valore fosse passato come "pippo" la tua versione andrebbe in crash.
Peter,

1

Ho pensato Vignesh Pichamani la risposta di fosse la più semplice e pulita. Aggiungendo alla sua la possibilità di impostare il numero di giorni prima della scadenza:

EDIT: aggiunta anche l'opzione 'non scade mai' se non è impostato alcun numero del giorno

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

Imposta il cookie:

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

1

So che ci sono molte grandi risposte. Spesso, ho solo bisogno di leggere i cookie e non voglio creare sovraccarico caricando librerie aggiuntive o definendo funzioni.

Ecco come leggere i cookie in una riga di javascript . Ho trovato la risposta nell'articolo del blog di Guilherme Rodrigues :

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

Questo legge il cookie chiamato key, carino, pulito e semplice.


-1
$.cookie("test", 1); //set cookie
$.cookie("test"); //get cookie
$.cookie('test', null); //delete cookie
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.