[Tutorial JS] Cookie-uri part. 2

#1
Nume Tutorial: Cookie-uri part. 2
Descriere: Cookie-uri part. 2
Download:
Autor: Anonim
Sursa (Link-ul oficial):
tutorialeonline
Propria parere: Folositor.
Tutorialul:

1. Fişiere cookie cu acelaşi nume

Dacă un browser are mai multe fişiere cookie pentru un site şi au acelaşi nume, definite fiecare cu altă cale în parametrul "path", şi cu valori diferite, de exemplu dacă avem trei fişiere cookie cu numele "color", şirul cookie ar arăta astfel:

color=blue; color=green; color=white

În cazul acesta, pentru a număra valorile asociate unui nume cookie puteţi folosi următoarea funcţie:

Cod: Selectaţi tot

 function GetCookieCount (name) {
    var result = 0;
    var myCookie = " " + document.cookie + ";";
    var searchName = " " + name + "=";
    var nameLength = searchName.length;
    var startOfCookie = myCookie.indexOf(searchName);
    while (startOfCookie != -1) {
       result += 1;
       startOfCookie = myCookie.indexOf(searchName, startOfCookie + nameLength);
    }
    return result;
 } 
Împreună cu această funcţie care numără câte valori asociate există, trebuie să aveţi şi o funcţie care să regăsească o anumită instanţă a unui cookie, cum este următoarea:

Cod: Selectaţi tot

function GetCookieNum (name, cookieNum) {
    var result = null;
    if (cookieNum >= 1) {
       var myCookie = " " + document.cookie + ";";
       var searchName = " " + name + "=";
       var nameLength = searchName.length;
       var startOfCookie = myCookie.indexOf(searchName);
       var cntr = 0;
       for (cntr = 1; cntr < cookieNum; cntr++) {
          startOfCookie = myCookie.indexOf(searchName, startOfCookie + nameLength);
       }
       if (startOfCookie != -1) {
          startOfCookie += nameLength; // omite nume cookie anterior
          var endOfCookie = myCookie.indexOf(";", startOfCookie);
          result = unescape(myCookie.substring(startOfCookie, endOfCookie));
       }
    }
    return result;
 } 
2. Ştergerea unui cookie

Pentru a şterge un cookie, numele şi calea (dacă a fost specificat parametrul "path") trebuie să fie acelaşi cu numele şi calea folosite la stabilirea fişierului cookie.
Ştergerea unui cookie se face prin stabilirea datei de expirare la un moment în trecut, ca în exemplul următor:

Cod: Selectaţi tot

function ClearCookie (name) {
    var ThreeDays = 3*24*60*60*1000;
    var expDate = new Date();
    expDate.setTime (expDate.getTime() - ThreeDays);
    document.cookie = name + "=ImOutOfHere; expires=" + expDate.toGMTString();
 } 
3. Exemplu complet de utilizare cookie

Pentru a înţelege mai bine cum puteţi crea şi folosi fişierele cookie, studiaţi exemplul următor.
Exemplul este ceva mai complex, cuprinde un script cu mai multe funcţii care conţin multe din elementele învăţate în lecţiile anterioare cât şi altele mai avansate, pentru lucrul cu şiruri.
Scopul acestui exemplu este de a înţelege cum funcţionează fişierele cookie, acesta conţine în secţiunea HEAD a unui document HTML un script JavaScript în care sunt definite 4 funcţii pentru lucrul cu fişiere cookie, iar în corpul paginii, BODY, este creat un tabel HTML cu 2 coloane, în prima este un formular pentru scrierea unor preferinţe care vor fi trimise la script pentru înregistrarea acestora în cookie, iar a doua coloană conţine un buton care activează afişarea preferinţelor din cookie şi un alt buton care şterge cookie-urile.
Codul complet este următorul:

Cod: Selectaţi tot

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
 <head>
    <title>Exemplu utilizare cookie</title>
    <script type="text/javascript">
    <!--
       // Functia pt. setarea cookie-urilor
       function SetCookie () {
          // Se definesc variabilele care preiau valorile campurilor din formular
          var culoare = document.preferinte.culoare.value;
          var fructe = document.preferinte.fructe.value;
          var citat = document.preferinte.citat.value;
 
          // Seteaza timpul de expirare, 2 zile
          var twoDays = 2*24*60*60*1000
          var expDate = new Date()
          expDate.setTime(expDate.getTime()+twoDays);
 
          // Creaza cookie-urile
          document.cookie = "cookie1" + "=" + escape(culoare) + "; expires=" + expDate.toGMTString() ;
          document.cookie = "cookie2" + "=" + escape(fructe) + "; expires=" + expDate.toGMTString() ;
          document.cookie = "cookie3" + "=" + escape(citat) + "; expires=" + expDate.toGMTString() ;
       }
 
       // Functia care verifica daca exista cookie-ul cu un anumit nume transmis ca argument
       // Daca exista, prelucreaza sirul pt. extragerea valorii acestuia
       // Returneaza valoarea asociata numelui
       function checkCookie(c_name) {
          if (document.cookie.length>0) {
             c_start=document.cookie.indexOf(c_name + "=");
             if (c_start!=-1) {
                c_start=c_start + c_name.length+1;
                c_end=document.cookie.indexOf(";",c_start);
                if (c_end==-1) {
                   c_end=document.cookie.length;
                }
                return unescape(document.cookie.substring(c_start,c_end));
             }
          }
          // Daca cookie-ul verificat nu exista
          return "Nu ati adaugat inca o preferinta";
       }
 
       // Functia trimite valorile primite la apelare spre verificare la functia precedenta
       // Daca numele cookie-ului exista, stocheaza valoarea intr-o matrice
       // Afiseaza in pagina valorile cookie-urilor
       function getCookie() {
          nr = getCookie.arguments.length
 
          var val_c = new Array(nr)
          var a = 0
 
          for (var i=0; i<nr; i++) {
             valoare=checkCookie(getCookie.arguments[i]);
             if (valoare!=null && valoare!="") {
                val_c[a] = valoare;
                a++
             }
          }
 
          // Afiseaza in pagina, la id-urile indicate, valorile cookie-urilor
          document.getElementById("idculoare").childNodes[0].nodeValue = val_c[0];
          document.getElementById("idfructe").childNodes[0].nodeValue = val_c[1];
          document.getElementById("idcitat").childNodes[0].nodeValue = val_c[2];
       }
 
       // Functia pt. stergerea cookie-urilor
       function stergeCookie() {
          nr_c = stergeCookie.arguments.length
          var ThreeDays = 3*24*60*60*1000;
          var expDate = new Date();
          expDate.setTime (expDate.getTime() - ThreeDays);
 
          for (var n=0; n<nr; n++) {
             document.cookie = stergeCookie.arguments[n] + "=DataStearsa;
             expires=" + expDate.toGMTString();
          }
       }
    // -->
 </script>
 </head>
 
 <body>
 
 <table border="1" bordercolor="#8888fe" width="580" cellpadding="2" cellspacing="0">
 <tr><td>
    <form name="preferinte">
    Scrieti culoarea favorita:
    <input type="text" name="culoare" size="20" maxlength="40" /><br /><br />
    Scrieti fructele preferate:
    <input type="text" name="fructe" size="20" maxlength="40" /><br /><br />
    Scrieti o fraza (un citat) favorita:<br />
    <input type="text" name="citat" size="40" maxlength="80" /><br /><br />
    <input type="button" value="Favorite" name="buton" onclick="SetCookie()" />
    <input type="reset" value="Reset" name="reset" />
    </form>
 
 </td><td>
    <form name="preferinte2">
    <input type="button" value="Afiseaza Favorite" name="buton" onclick="getCookie('cookie1', 'cookie2', 'cookie3')" />
    <input type="button" value="Sterge cookie" name="Clear" onclick="stergeCookie('cookie1', 'cookie2', 'cookie3')" />
    </form>
 <b>Culoare favorita - </b><span id="idculoare"> </span><br />
 <b>Fructe preferate - </b><span id="idfructe"> </span><br />
 <b>Citat favorit - </b><span id="idcitat"> </span><br />
 
 </td></tr>
 </table>
 
 </body>
 </html> 
- Funcţiile din script au fost definite pentru acest exemplu, pentru folosirea lor în alte scripturi necesită modificări.
- Apăsaţi întâi butonul din dreapta "Afişează Favorite", vor fi afişate mesaje de eroare, precum că nu aţi adăugat încă o preferinţă.
Completaţi în câmpurile din stânga preferinţele dv. apoi apăsaţi butonul "Favorite", acesta apelează funcţia "SetCookie()" care va prelua datele adăugate şi le va stoca în fişiere cookie care vor expira peste două zile de la crearea lor.
Daţi click pe butonul "Afişează Favorite", acesta apelează funcţia "getCookie()" căreia îi trimite ca argumente numele cookie-urilor a căror valoare va fi afişată, vor apare preferinţele scrise de dv., preluate din cookie.
Importanţa şi avantajul fişierelor cookie le veţi constata după aceasta.
Închideţi browser-ul, redeschideţi-l iar la această pagină şi apăsaţi butonul "Afişează Favorite". Observaţi că sunt afişate preferinţele dv. adăugate mai devreme. Mâine, dacă reveniţi la această pagină vor fi afişate aceleaşi preferinţe, fără să trebuiască să le mai scrieţi. Aceste date sunt păstrate 2 zile în fişiere cookie după care vor fi şterse automat.
Dacă vreţi să ştergeţi aceste cookie-uri mai devreme, apăsaţi butonul "Şerge cookie", acesta apelează funcţia "stergeCookie()" căreia îi trimite ca argumente numele cookie-urilor pe care să le şteargă.

Înapoi la “Tutoriale JS”

Cine este conectat

Utilizatori răsfoind acest forum: Niciun utilizator înregistrat și 1 vizitator