Rad sa kolačićima iz javascripta. Skladištenje podataka Kreiranje kolačića

Kolačić je skup podataka koji kreira web server i koji se šalje svaki put kada se pristupi serveru. Kolačići se pohranjuju u pretraživaču korisnika. Obično se kolačići koriste za: pohranjivanje različitih postavki jedinstvenih za korisnika, autentifikaciju korisnika, razne statistike i druge slične stvari. A o radu sa kolačićima u PHP-u ćemo govoriti u ovom članku.

Počnimo s najjednostavnijim stvarima: pisanjem kolačića u pretraživač korisnika. Za ovo postoji funkcija setcookie():

Nakon pokretanja skripte, moći ćete vidjeti kolačić. Možete ih pregledati na sljedeći način: ili pretražite u postavkama vašeg pretraživača, ili pretražite direktno na tvrdom disku gdje su pohranjeni kolačići vašeg pretraživača, ili (najlakši način) unesite u adresnu traku: “javascript:document.cookie”. Samo unesite u istu karticu u kojoj ste pokrenuli skriptu, jer pretraživači odvajaju kolačiće jedne stranice od druge.

Sada se postavlja pitanje: “Kako prikazati kolačiće?”. Prikazuju se pomoću niza $_COOKIE:

Kao rezultat, videćete "Value". Kao što vidite, sve je elementarno.

A sada da riješimo ovaj problem s vama: ako je korisnik ovlašten na stranici, pozdravite ga, u suprotnom prikažite obrazac za prijavu. Osim toga, ako su podaci uneseni u obrazac netačni, tada se prikazuje odgovarajuće upozorenje. Implementacija izgleda ovako:








Kod je prilično transparentan, međutim, ovaj članak mogu pročitati i početnici, pa pogledajmo ovaj kod detaljnije. Prvo pišemo dvije funkcije: jednu za prikaz obrasca za prijavu, a druga funkcija vraća true ako su podaci točni (tj. ako je prijava"Admin ", а пароль - "123456 "), иначе возвращает false . Обратите внимание на $_SERVER["SCRIPT_NAME"] . Данная константа содержит путь к текущему файлу. То есть мы хотим, чтобы обработчик формы (значение атрибута action ) был этот же файл.!}

Zatim provjeravamo: da li je obrazac dostavljen (da li postoji proslijeđena vrijednost "log"). Ako postoji, obrazac je poslan i počinjemo provjeravati primljene podatke. Imajte na umu da lozinku prosljeđujemo kroz funkciju md5() kako ne bismo pohranili lozinku u čistom tekstu u kolačić. Pomoću funkcije check() provjeravamo da li su podaci tačni. Ako su podaci tačni, onda ih upisujemo u kolačić, u suprotnom prikazujemo red: “Nevažeći podaci”.

Zatim počinjemo sa ispisivanjem HTML oznaka. Imajte na umu da ne možemo koristiti funkciju setcookie() nakon što nešto izbacimo u pretraživač. To jest, ne možete, na primjer, prikazati HTML oznake, a zatim koristiti funkciju setcookie(), inače će doći do greške. I, vjerujte mi, mnogi početnici to prihvataju.

Nakon što izbacimo HTML tagove, dolazimo do tačke u kojoj treba da proverimo kolačić. Čitamo ih i onda ih provjeravamo. Ako su točni, tada pozdravljamo korisnika, u suprotnom prikazujemo obrazac za prijavu.

To je cijeli scenario, kao što vidite, možete ga shvatiti. Međutim, ima jednu manu zbog činjenice da ispisujemo "Nevažeći podaci" prije oznake " ". Stoga, moj domaći zadatak: ispraviti ovu grešku tako da ne dođe do kršenja valjanosti HTML koda. Ovo je vrlo jednostavno za napraviti, ali će biti izuzetno korisno, jer ćete morati razumjeti ovaj kod, a samim tim i shvatiti kako raditi s kolačićima u PHP-u. I morate vrlo često koristiti kolačiće u PHP-u, a ja ću pokušati da konsolidujem vaše znanje o njima u sljedećim člancima.

Kolačići su mehanizam za pohranu podataka pretraživača. udaljeni računar identificirati posjetitelje koji se vraćaju i pohraniti parametre web stranice (na primjer, varijable).

Dajemo primjer korištenja kolačića koristeći poseban primjer.

Recimo da trebamo napisati brojač posjeta web stranici. Moramo da znamo koliko je poseta sajtu napravio svaki određeni posetilac.

Ovaj problem se može riješiti na dva načina. Prvi je da se vodi evidencija o IP adresama korisnika. Da biste to učinili, potrebna vam je baza podataka samo jedne tablice, čija je približna struktura sljedeća:

Kada korisnik posjeti neku stranicu, potrebno je da odredimo njegovu IP adresu, pronađemo podatke o njegovim posjetama u bazi podataka, povećamo brojač i prikažemo ga u pretraživaču posjetitelja. Nije teško napisati rukovalac (skriptu) za takvu proceduru. Međutim, kada koristimo ovu metodu imamo sljedeće probleme:

  • Za svaku IP adresu morate voditi evidenciju u jednoj tabeli, koja može biti veoma velika. I iz ovoga proizilazi da neracionalno koristimo procesorsko vrijeme i prostor na disku;
  • Većina kućnih korisnika ima dinamičke IP adrese. Odnosno, danas je njegova adresa 212.218.78.124, a sutra - 212.218.78.137. Dakle, postoji velika vjerovatnoća da se jedan korisnik identificira nekoliko puta.

Možete koristiti drugu metodu, koja je mnogo lakša za implementaciju i efikasnija. Postavljamo varijablu u Cookie-u koja će biti pohranjena na disk udaljenog korisnika. Ova varijabla će pohraniti informacije o posjetima. Skripta će ga pročitati kada posjetitelj pristupi serveru. Prednosti ove metode identifikacije su očigledne. Prvo, ne moramo da skladištimo mnogo nepotrebnih informacija o IP adresama. Drugo, ne zanimaju nas dinamičke IP adrese, jer se podaci o njihovim posjetima pohranjuju posebno za svakog posjetitelja stranice.

Sada je jasno zašto možemo koristiti kolačiće - da pohranimo malu količinu informacija od klijenta (posjetioca) stranice, na primjer: postavke stranice (boja pozadine stranice, jezik, dizajn tabele, itd.), kao i druge informacije .

Kolačići su obične tekstualne datoteke, koji se pohranjuju na disk posjetitelja web stranice. Datoteke kolačića sadrže informacije koje je u njih zabilježio server.

Programiranje kolačića

Počnimo sa programiranjem kolačića.

Za Postavke kolačića s se koristi funkcija SetCookie(). Postoji šest parametara koje možete navesti za ovu funkciju, od kojih je jedan obavezan:

  • name - specificira ime (stringova) koje je dodeljeno kolačiću;
  • value - definira vrijednost varijable (string);
  • expire - vijek trajanja varijable (cijeli broj). Ako ovaj parametar nije naveden, kolačić će “živeti” do kraja sesije, odnosno dok se pretraživač ne zatvori. Ako je određeno vrijeme, onda kada stigne, kolačić će se samouništiti.
  • path - put do kolačića (string);
  • domain - domen (string). Vrijednost se postavlja na ime hosta s kojeg je kolačić instaliran;
  • siguran - prijenos kolačića putem sigurne HTTPS veze.

Obično se koriste samo prva tri parametra.

Primjer postavljanja kolačića:

Kada koristite kolačiće, imajte na umu da kolačići moraju biti postavljeni prije prvog izlaza informacija u pretraživač (na primjer, od strane echo operatora ili izlaza bilo koje funkcije). Stoga je preporučljivo postaviti kolačiće na samom početku skripte. Kolačići se postavljaju pomoću određenog zaglavlja servera, a ako skripta nešto ispusti, to znači da počinje tijelo dokumenta. Kao rezultat toga, kolačići neće biti instalirani i može se prikazati upozorenje. Da biste provjerili da li su kolačići uspješno instalirani, možete koristiti sljedeću metodu:

Funkcija SetCookie() vraća TRUE ako je kolačić uspješno postavljen. Ako kolačić nije moguće postaviti, SetCookie() će vratiti FALSE i moguće upozorenje (u zavisnosti od PHP postavki). Primjer neuspješne instalacije kolačića:

Kolačić nije mogao biti postavljen jer smo odštampali niz "Hello" u pretraživač prije slanja zaglavlja kolačića.

Čitanje vrijednosti kolačića

Pristup kolačićima i njihovim vrijednostima je prilično jednostavan. Oni su pohranjeni u superglobalnim nizovima $_COOKIE i $HTTP_COOKIE_VARS.

Vrijednosti se pristupa po imenu instaliranih kolačića, na primjer:

echo $_COOKIE["my_cookie"];
// Prikazuje vrijednosti instaliranog kolačića "My_Cookie"

Primjer postavljanja kolačića i zatim čitanja:

U razmatranom primjeru, prvi put kada se pristupi skripti, "test" kolačića je postavljen na vrijednost "zdravo". Kada ponovo pristupite skripti, bit će prikazana vrijednost kolačića "test", odnosno string "Hello".

Kada čitate vrijednosti kolačića, obratite pažnju na provjeru postojanja kolačića, na primjer koristeći isset() operator. Ili potiskivanjem izlaza greške pomoću @ operatora

Evo primjera kako napraviti brojač za broj učitavanja stranica pomoću kolačića:

Uklanjanje kolačića

Ponekad je potrebno izbrisati kolačiće. Ovo nije teško učiniti; samo trebate ponovo postaviti kolačić sa identičnim imenom i praznim parametrom. Na primjer:

Postavljanje polja kolačića i čitanje

Možemo postaviti niz kolačića koristeći uglaste zagrade u nazivima kolačića, a zatim pročitajte niz kolačića i vrijednosti tog niza:

Prednosti korištenja kolačića su neosporne. Međutim, postoje i određeni problemi s njihovom upotrebom. Prvi od njih je da posjetitelj može blokirati pretraživač od prihvaćanja kolačića ili jednostavno izbrisati sve ili dio kolačića. Stoga možemo imati određenih poteškoća u identifikaciji takvih posjetitelja.



>
Ako imate još pitanja ili vam nešto nije jasno - dobrodošli kod nas

Zdravo svima!

JS ne pruža prikladan API za rad sa kolačićima. I ovo, u principu, nije loše, moglo bi biti gore (na primjer, js uopće ne bi implementirao rad s kolačićima), ali je ipak bolje kada možete čitati kolačiće pomoću jedne instrukcije (što je još uvijek nemoguće sa native js).

Postoji mnogo okvira i dodataka za njih koji nadoknađuju ovaj nedostatak. Međutim, postoje projekti u kojima je neprikladno povezivati ​​okvir samo radi pogodnosti rada s kolačićima.

Zapravo, postavio sam i implementirao zadatak kreiranja metoda za upravljanje kolačićima, sa prekrasnim pristupima kao što su:

Cookie.set("bla", "blabla");
cookie.get("bla");

code.google.com/p/jscookie - stranica na Google Code

Malo teorije o mehanizmu koji pruža js za rad s kolačićima:

Sve što imamo je svojstvo document.cookie; ono ne implementira metode poznate prosječnom programeru, kao što je document.cookie.get("bla");

Čitanje kolačića document.cookie sadrži skup vrijednosti cookie_name=cookie_value; (odvojeno sa "; " (tačka-zarez plus razmak)), slijedi da da biste dobili vrijednost određenog kolačića, morate raščlaniti cijeli niz i izvući potrebne podatke. Ono što je vrijedno napomenuti je da svojstvo sadrži parove ime=vrijednost i ne sadrži nikakve dodatne podatke o kolačićima kao što su: vrijeme isteka, putanja, domena, siguran Kreiranje/ažuriranje kolačića document.cookie se ponaša kao niz, ali ne kao običan jedan. Zamislimo da imamo 2 kolačića key1 = val1 i key2 = val2.

Alert(document.cookie) //key1=val1; ključ2=val2;

Da biste dodali novi kolačić ključ3 = val3

Document.cookie= "key3=val3; ";
alert(document.cookie) //key1=val1; ključ2=val2; ključ3=val3;

Da biste ažurirali kolačić, postavite key2 na hello world

Document.cookie= "key2=hello world; ";
alert(document.cookie) //key1=val1; key2=zdravo svijete; ključ3=val3;

Uklanjanje kolačića Sada ću vam reći nešto o kolačićima kao takvima, ne pretvaram se da imam potpuno i temeljno znanje o ovoj temi, samo ću vam reći nešto o onome što znam.

Cook, osim imena i značenja, u svom arsenalu ima još nekoliko važnih svojstava, a to su:

Istječe - vrijeme nakon kojeg se kolačić briše.
domena - domena za koju je kolačić važeći, grubo govoreći, ako je kolačić kreiran na js.com domeni, onda neće biti vidljiv ni na jednoj drugoj domeni.
put - skup dokumenata za koje će pretraživač poslati kolačić kada se to zatraži
secure - svojstvo zastavice koje dozvoljava pretraživaču da šalje kolačiće samo tokom https veze

Općenito, sve je to napisano u obliku document.cookie = "key4=val4;

Trik za brisanje kolačića je ažuriranje kolačića sa svojstvom expires koji ukazuje na prošlost, na primjer:

Document.cookie= "key2=; expires=pon, 05 jul 1982 16:37:55 GMT; ";
alert(document.cookie)//key1=val1; ključ3=val3;

Zapravo sve

UPD: ovo je moja prva objava, molim vas nemojte me previše forsirati. Nadam se da će nekome biti od koristi

Ponekad trebate raditi s kolačićima putem JavaScripta. Na primjer, kolačić bi mogao biti alternativna opcija razmjena podataka između PHP-a i JavaScript-a. Recimo da JavaScript zapisuje korisnikovo trenutno vrijeme na računaru (tj. njegovo lokalno vrijeme) u kolačić korisnika, a PHP čita ove podatke i uzima u obzir pomak u odnosu na vrijeme servera. Pogledajmo sada kako raditi s kolačićima putem JavaScripta.

Jedina stvar koju JavaScript mora raditi s kolačićima je svojstvo kolačića objekta dokumenta:


upozorenje(document.cookie);

Kao rezultat pokretanja ovog koda, svi kolačići s ove stranice bit će prikazani i to u određenom formatu. Izgleda otprilike ovako: "name=123; login=456". Na šta ovdje treba obratiti pažnju? Činjenica je da svi kolačići, naravno, imaju ime i vrijednost, a sami kolačići su međusobno odvojeni tačkom zarezom i razmakom.

Poznavajući ovaj format, lako možete izdvojiti vrijednost željene varijable.

Da biste dodali još jednu varijablu putem JavaScripta, morate napisati sljedeći kod:


document.cookie = "novo=5";

Imajte na umu da je "=", a ne "+=". U tom slučaju ne brišete sve postojeće kolačiće, već dodajete novu varijablu.

Kada je u pitanju brisanje kolačića, možete iskoristiti činjenicu da je moguće odrediti vijek trajanja kolačića. A ako naznačite da je trebalo završiti prije godinu dana, kolačić će se odmah izbrisati.

Da vam dam potpunu ideju, prikazujem kod za sve 3 funkcije za upravljanje kolačićima, kao i primjer njihove upotrebe:


funkcija setCookie(ime, vrijednost) (
document.cookie = ime + "=" + vrijednost;
}
funkcija getCookie(ime) (
var r = document.cookie.match("(^|;) ?" + ime + "=([^;]*)(;|$)");
if (r) vrati r;
inače vrati "";
}
funkcija deleteCookie(ime) (
var datum = novi datum(); // Uzmite trenutni datum
date.setTime(date.getTime() - 1); // Vratiti se u "prošlost"
document.cookie = ime += "=; expires=" + date.toGMTString(); // Postavite kolačić na praznu vrijednost i datum isteka dok vrijeme ne prođe
}
setCookie("firstname", "Vasya"); // Postavi kolačić
alert(getCookie("firstname")); // Izlazni kolačići
deleteCookie("ime"); // Izbriši kolačiće
alert(getCookie("firstname")); // Provjerite da ništa nije ostalo

Ovo je najjednostavnija biblioteka koju možete koristiti kada radite s kolačićima putem JavaScripta.

Posljednje ažuriranje: 1.11.2015

Kolačići su mali skupovi podataka (ne više od 4 kByte) pomoću kojih web stranica može pohraniti bilo koju informaciju na korisnikovom računalu. Koristeći kolačiće, možete pratiti aktivnosti korisnika na stranici: da li je korisnik prijavljen na stranicu ili ne, pratiti historiju njegovih posjeta itd.

Čuvanje kolačića

Funkcija setcookie() se koristi za spremanje kolačića na računar korisnika. Ima sljedeću definiciju:

Bool setcookie(string $name, string $value, int $expire, string $path, string $domain, bool $secure, bool $httponly);

Funkcija setcookie() može prihvatiti sljedeće parametre:

    name: naziv kolačića koji će se koristiti za pristup njegovoj vrijednosti

    vrijednost: vrijednost ili sadržaj kolačića - bilo koji alfanumerički tekst ne veći od 4 kByte-a

    expire (opciono): Datum isteka nakon kojeg se kolačići uništavaju. Ako ovaj parametar nije postavljen ili je jednak 0, kolačić se uništava nakon zatvaranja pretraživača.

    put (opciono): put do direktorija na serveru za koji će kolačići biti dostupni. Ako navedete "/", kolačići će biti dostupni na cijeloj web stranici. Ako postavite, na primjer, "/mydir/" , kolačići će biti dostupni samo iz direktorija /mydir/" i sve njegove poddirektorije. Zadana vrijednost je trenutni direktorij u koji su instalirani kolačići.

    domena (opcionalno): Određuje domenu za koju će kolačići biti dostupni. Ako se radi o domeni drugog nivoa, npr. localhost.com, tada su kolačići dostupni za cijelu web lokaciju localhost.com, uključujući njene poddomene poput blog.localhost.com.

    Ako je navedena poddomena blog.localhost.com, tada su kolačići dostupni samo unutar tog poddomena.

    secure (opciono): Određuje da se vrijednost kolačića treba poslati preko HTTPS-a. Ako je postavljeno na true, kolačić od klijenta će biti proslijeđen serveru samo ako je uspostavljena sigurna veza. Zadano je false .

    httponly (opciono): ako je tačno, kolačići će biti dostupni samo putem http protokola. Odnosno, kolačići u ovom slučaju neće biti dostupni jezicima za skriptiranje, na primjer, JavaScript. Podrazumevano je parametar lažan

Sačuvajmo kolačiće:

$value1 = "Singapur"; $value2 = "Kineski"; setcookie("grad", $value1); setcookie("language", $value2, time()+3600); // rok važenja 1 sat

Ovdje su postavljena dva kolačića: "grad" i "jezik". Prvi kolačić se uništava nakon zatvaranja pretraživača, a drugi nakon 3600 sekundi, odnosno nakon sat vremena

Primanje kolačića

Da biste dobili kolačić, možete koristiti globalni asocijativni niz $_COOKIE , na primjer, $_COOKIE["city"] . Dakle, dobijamo prethodno sačuvane kolačiće:

Ako (isset($_COOKIE["grad"]) echo "Grad: " . $_COOKIE["grad"] . "
"; if (isset($_COOKIE["language"])) echo "Jezik: " . $_COOKIE["jezik"];

Pohranjivanje nizova u kolačiće

Čuvanje nizova u kolačićima ima neke posebne karakteristike. Na primjer, spremimo sljedeći niz:

Setcookie("lan", "PHP"); setcookie("lan", "C#"); setcookie("lan", "Java");

Sada ga dobijamo i prikazujemo na stranici:

If (isset($_COOKIE["lan"])) ( foreach ($_COOKIE["lan"] kao $name => $value) ($name = htmlspecialchars($name); $value = htmlspecialchars($value) ); echo "$name. $value
"; } }

Uklanjanje kolačića

Da biste izbrisali kolačić, samo trebate navesti neko vrijeme u prošlosti kao datum isteka:

Setcookie("grad", "", vrijeme() - 3600);

mob_info