Bukas
Isara

Cookies - pag-install. PHP cookies - lumikha, magbasa, magtanggal ng Cookies sa PNG

Inihanda ni: Andrey Kosyak Petsa ng publikasyon: 12/22/2010

Sa unang artikulong Cookies - naghurno kami ng cookies, tumingin kami sa cookies mula sa isang mahabang distansya, kaya kung naiintindihan mo ang mga pangkalahatang konsepto at layunin ng cookies, maaari kang magpatuloy nang direkta sa pagluluto ng hurno (nakakuha din ako ng oven), samakatuwid, ilagay sa isang culinary cap at lumapit. Magbake tayo!

Art. Paghahanda

Alam mo na na ang cookie ay isang string, at alam mo rin kung ano ang hitsura ng cookie sa pamamagitan ng mga mata ng isang browser. Kapag naka-install sa browser, ang cookie ay mukhang parehong linya:

"cookieName = cookieValue; mag-e-expire = Fri, 21 Ene 2021 06:10:00 GMT; path = /; domain = lessons.site; secure = true; "

Ang mga kundisyon para sa pagkakaroon ng cookies ay tinukoy ng limang parameter (key=value pairs) (MAHALAGA! Ang bawat isa ay dapat na sundan ng isang separator character na ";"), tingnan natin ang mga ito:

Pagpuno ng cookie

"cookieName =cookieValue;" ay ang pangunahing parameter ng cookie kung wala ito, nawawala ang kahulugan ng cookie. Dito ang cookieName ay ang natatanging pangalan para sa cookie at ang cookieValue ay ang impormasyon (halaga) na iimbak nito. Sa hinaharap, sasabihin ko na ang halaga ay maaaring maging anuman, anumang istraktura ng nakaimbak na data na maginhawa para sa iyo (kahit JSON), pati na rin ang anumang mga simbolo. Ang tanging pares na kinakailangan kapag nagtatakda ng cookies.

Habang buhay

"expires = Fri, 21 Ene 2021 06:10:00 GMT" - ang pares na ito, bagama't opsyonal, ay gumaganap ng napakahalagang papel, kasama ng una. Tinutukoy ng parameter na ito ang buhay ng cookie, ibig sabihin, sa pinakamalapit na segundo, sa tinukoy na petsa, ang cookie ay "mabubuhay nang mahabang panahon." Kung ang parameter na ito ay hindi tinukoy, ang cookie ay magiging wasto lamang para sa tagal ng session, na nangangahulugan na kapag ang browser ay sarado, ito ay tatanggalin.

Ang isang mahalagang punto ay ang format ng petsa. Dapat na tukuyin ang petsa sa text format LAMANG (Biy, 21 Ene 2021 06:10:00 GMT). Muli, tumingin sa unahan ng kaunti, sasabihin ko na ang bagay na Petsa ay makakatulong sa atin dito;

Daan ng pag-install

"path =/" - tinutukoy ng parameter na ito ang path (directory) kung saan valid ang cookie. Ngayon ang path ay may halagang "/", ito ay walang iba kundi ang root directory, kaya ang cookie ay mababasa ng ganap na lahat ng mga direktoryo sa site. Kung ang pag-access sa cookie ay dapat na limitado, pagkatapos ay hindi namin tukuyin ang parameter ng path o tukuyin ang pangkalahatang direktoryo ng magulang sa loob nito, at ang cookie ay mai-install para sa isang partikular na direktoryo, ngunit ang mga detalye ay tulad na ang cookie ay magagamit sa lahat ng mga subdirectory nito, sa parehong oras - hindi nakikita ng mga katabi at parent na direktoryo.

Para saan ito? Isipin natin ang isang elementarya na sitwasyon: isang Internet cafe, una ang gumagamit na si Vasya ay dumating at nagtrabaho kasama ang kanyang pahina sa social network, at pagkatapos niya ay dumating si Petya at, sa parehong computer, sa parehong network, ay nagtrabaho sa kanyang pahina. Ang mga pahina ng mga kalahok ay matatagpuan sa parehong domain, ngunit, bilang panuntunan, ay matatagpuan sa mga katabing direktoryo. Halimbawa: Ang pahina ni Vasya ay http://socset.com/vasya, ang pahina ni Petya ay http://socset.com/petya. Maaari mong isipin kung anong kaguluhan ang magkakaroon kung ang cookies ay naka-install sa root directory: Vasya ay magagawang gumana sa Petya's cookies at vice versa. Sa palagay ko hindi magugustuhan ng isa o ng isa ang pagpipiliang ito. Samakatuwid, sa kasong ito, magiging angkop kung ang cookies ay nakatali lamang sa direktoryo ng isang partikular na user, at samakatuwid sa lahat ng mga subdirectory nito.

Domain

"domain = lessons.site" - tinutukoy ng pares na ito ang domain kung saan wasto ang cookies. Bilang isang tuntunin, bihirang kinakailangan na gamitin ito nang tahasan. Ang sitwasyon sa parameter na ito ay katulad ng sitwasyon sa parameter ng path, na may pagkakaiba na sa Domain kami ay nagpapatakbo gamit ang mga domain at subdomain at hindi mga direktoryo. Ibig sabihin, sa kasong ito, nakatakda ang cookies para sa mga aralin..subdomain ng site Kung hindi tinukoy ang parameter, gagamitin bilang default ang domain address ng dokumento.

Kaligtasan

"secure =true" — parameter ng seguridad. Kung ang parameter na ito ay nakatakda sa true, magpapadala lamang ang browser ng cookies sa server na humihiling sa kanila sa isang secure na channel (SSL). Ang pagpipiliang ito ay bihirang ginagamit din. Default sa false.

Ang unang pancake ay bukol?

Ngayon subukan nating tratuhin ang aming browser gamit ang isang cookie. Ang object.cookie object ay makakatulong sa amin dito:

Document.cookie = "firstCookie=Unang pancake bukol?; mag-e-expire=Biyer, 21 Ene 2021 06:10:00 GMT; path=/;";

Ang resulta ay makikita sa pamamagitan ng pagbubukas ng seksyon ng cookies sa iyong browser, o simpleng:

Document.cookie = "firstCookie=Unang pancake bukol?; mag-e-expire=Biyer, 21 Ene 2021 06:10:00 GMT; path=/;"; alerto(document.cookie);

At hindi bukol sa lahat! Lahat ay umuugong at nasa lugar.

Ang tala

Nais kong iguhit ang iyong pansin sa kakaiba ng mga browser ng WebKit. Tumanggi silang magtakda ng cookies kung bubuksan nang lokal ang dokumento. Karaniwan akong gumagamit ng isang lokal na server sa mga ganitong kaso; kakailanganin din ito kapag nagtatrabaho sa AJAX. Samakatuwid, tulad ng sinasabi nila, dapat mayroon! Halimbawa, Denwer (link sa dulo ng artikulo).

Higit pang cookies

Inayos namin ang isang cookie. Ngunit paano kung kailangan mong mag-imbak, halimbawa, ng data mula sa isang form (pag-login, e-mail, numero ng telepono, atbp.)? Sa kasong ito, magagawa mo ito:

Document.cookie = "myLogin=My login; expires=Fri, 21 Ene 2021 06:10:00 GMT; path=/;"; document.cookie = " [email protected]; mag-e-expire=Biy, 21 Ene 2021 06:10:00 GMT; path=/;"; document.cookie = "myPhone=1234567; mag-e-expire=Biy, 21 Ene 2021 06:10:00 GMT; landas=/;";

Kaya, mayroon kaming tatlong cookies na nag-iimbak ng login, email at numero ng telepono, ayon sa pagkakabanggit. Ngunit naaalala mo ba ang tungkol sa mga paghihigpit sa bilang ng cookies mula sa isang domain, pati na rin ang kabuuang bilang ng mga ito? Nangangahulugan ito na sa ganitong paraan maaari lamang kaming mag-imbak ng isang limitadong bilang ng mga halaga para sa mga patlang. At kung ang gayong limitasyon ay "nagtali" sa ating mga kamay, magagawa natin ito:

Var formData = escape("Aking login; [email protected];1234567"); document.cookie = "myFormCookie="+formData+"; mag-e-expire=Biy, 21 Ene 2021 06:10:00 GMT; landas=/;";

Bilang resulta, mayroon kaming 1 magagamit na espasyo ng cookie. "Idinikit" ko ang lahat ng data sa isang variable at pinaghiwalay ang mga ito gamit ang simbolo na ";", gayunpaman, anumang simbolo ay maaaring gamitin bilang isang separator sa loob ng variable, ito ang aming inisyatiba, dito kailangan lang naming tiyakin na ang separator na ito ay gumagana. hindi lilitaw sa mga halaga ng patlang, kung hindi man ay magkakaroon ng mga paghihirap sa ibang pagkakataon kapag kailangan mong basahin ang mga ito. Sa kasong ito, siyempre, kailangan mo pa ring tandaan ang tungkol sa limitasyon sa laki ng cookie (4kb).

Bakit escape function? Ito ay medyo simple, ine-encode nito ang halaga ng cookie sa hexadecimal na representasyon. Para saan? Una, ang browser ay nagpapadala ng cookies sa server, at upang ang data ay mabasa nang pantay-pantay sa mga server sa ilalim ng anumang sistema, ang pag-encode na ito ay ginagamit. Pangalawa, kung gagamitin natin ang delimiter na ";" sa isang variable na may mga halaga ng field, kung hindi namin i-encode ang string na ito, kung gayon ang cookie, hindi bababa sa, ay hindi maitakda nang tama, dahil ang separator ay ";" ginagamit upang paghiwalayin ang mga parameter ng cookie mismo. Ang puntong ito ay kailangang isaalang-alang at, simula ngayon, ginagamit bilang default kapag nagpapadala ng impormasyon (cookies, AJAX).

"...at hindi mo mapipigilan ang oras kahit sandali"

Ngayon tingnan natin ang parameter na nag-expire. Ang abala ay na hanggang sa sandaling ito ay itinakda namin nang manu-mano ang buhay para sa cookies. Ngunit, sa totoong mga kondisyon, ang diskarte na ito ay halos hindi naaangkop. Sa pinakamababa, dahil sa bawat kasunod na pagbisita sa site, ang buhay ng cookies ay dapat na pahabain ng ilang nakapirming linya, na, sa pangkalahatan, ay makatwiran at lohikal. Samakatuwid, ang bagay na Petsa ay ganap na makakatulong sa amin sa bagay na ito:

Var formData = escape("Aking login; [email protected];1234567"); cookieExp = new Date(); // gumawa ng Date object cookieExp.setMonth(cookieExp.getMonth()+1); // itakda ang kasalukuyang buwan at magdagdag ng isa pa dito document.cookie = "myFormCookie= "+ formData+"; expires="+cookieExp.toGMTString()+"; landas=/;";

Sa mga pagkilos na ito, itinakda namin ang buhay ng cookie sa eksaktong 1 buwan. Hindi na ako magdedetalye tungkol sa Date object sa artikulong ito, ilalarawan ko lang ang scheme para sa pagtatakda ng petsa:

  • linya 2: ideklara ang cookieExp bilang isang bagay na Petsa. Ang CookieExp ay naglalaman na ngayon ng kasalukuyang petsa;
  • linya 3: pag-reset sa cookieExp ng buwan. Gamit ang getMonth method, kinukuha namin ang kasalukuyang buwan at nagdadagdag kami ng isa pa dito. Bilang resulta, ang susunod na buwan ay itatala sa cookieExp;
  • linya 6: sa linyang ito ginagamit namin ang toGMTString() na paraan upang i-convert ang petsa sa format ng teksto;

Kaya, depende sa kung anong habambuhay ang gusto mong itakda para sa cookie, maaari kang gumamit ng iba pang mga pamamaraan ng Date object, mula get/setMilliseconds() hanggang get/setFullYear() (mula sa pagkuha/pagtakda ng mga millisecond hanggang sa pagkuha/pagtatakda ng taon).

Walang punto sa pagpapakita ng natitirang mga parameter bukod pa, ang kanilang mga default na halaga sa karamihan ng mga kaso ay angkop sa iyo.

Konklusyon

Tulad ng nakikita mo, ang pag-install ng cookies ay hindi isang bagay na supernatural, kailangan mo lang tandaan (ilang beses kong inuulit ang aking sarili :)) tungkol sa mga paghihigpit at lahat ay magiging tip-tip, well, o topi-top. Ang susunod na materyal ay tungkol sa kung paano ilabas ang aming mga cookies sa oven. Dito kailangan mong mag-isip ng kaunti.

Kung saan pupunta
  • susunod - Cookies - pagkuha
  • nakaraan -

Malamang na sulit na magsimula sa kung ano ang cookies at kung ano ang kailangan nito. Ang cookie ay isang piraso ng data na maaaring iimbak sa panig ng user at gamitin sa ibang pagkakataon upang ipatupad ang kanilang mga ideya.

Isipin natin na sa iyong website mayroon kang pagkakataon na pumili ng scheme ng kulay para sa site. Napakaginhawang ipatupad ito sa cookies, dahil ang tema na pipiliin niya ay makikita lamang niya.

Ang mga cookies ay umiiral sa parehong PHP at jQuery. Samakatuwid, isasaalang-alang namin ang bawat kaso nang mas detalyado.

Mga detalyadong tagubilin para sa pagtatrabaho sa Cookies sa jQuery

1. Pagtatakda ng Cookies

Ngayon ay maaari naming subukang lumikha ng aming unang cookie:

$.cookie("cookie_name", "cookie_value", ( mag-e-expire: 3, path: "/", domain: "your_site.ru", secure: true ));

Anong meron dito?

“cookie_name” – pangalan ng cookie;

“cookie_value” – halaga ng cookie;

"mag-e-expire" - ang bilang ng mga araw na maiimbak ang cookies (sa aming kaso - 3 araw). Pagkatapos ng panahong ito, awtomatikong tatanggalin ang cookies;

“path” – pagkakaroon ng cookies sa site (sa aming kaso “/” - available sa buong site). Kung gusto mo, maaari kang tumukoy lamang ng isang partikular na pahina o seksyon kung saan magiging available ang cookies, halimbawa, "/audio/rock";

“domain” – ang domain kung saan valid ang cookie. Kung mayroon kang isang subdomain, maaari mong tukuyin ito sa parameter na ito, halimbawa, "domain: "subdomain.your_site.ru"", at sa kasong ito ang cookie ay magagamit lamang sa domain na "subdomain.your_site.ru";

" secure" – isang parameter na nagsasaad na ang cookie ay dapat ipadala sa secure na https protocol.

Dito, hindi lahat ng mga parameter ay kinakailangan, at upang magtakda ng cookies, ang konstruksiyon na ito ay magiging sapat:

$.cookie("cookie_name", "cookie_value", ( mag-e-expire: 3, path: "/"));

2. Pagtanggap ng Cookie

Ang pagkuha ng cookies ay medyo simple; magagawa mo ito gamit ang code:

$.cookie("cookie_name");

Maaaring italaga ang code na ito sa isang variable at gamitin para sa iyong mga pangangailangan:

var content = $.cookie("cookie_name"); if(content != null) ( alert("Cookie exists!"); ) else ( alert("Cookie does not exist!"); )

Sumang-ayon, ito ay napaka-maginhawa.

3. Pag-alis ng Cookies

Upang mag-alis ng halaga ng cookie, itakda ito sa "null":

$.cookie("cookie_name", null);

Ito, sa palagay ko, ang katapusan ng pagpapakilala sa pagtatrabaho sa Cookies sa jQuery. Ang kaalamang ito ay sapat na upang ipatupad ang iyong mga ideya.

Mga detalyadong tagubilin para sa pagtatrabaho sa Cookies sa PHP

Hindi tulad ng nakaraang opsyon para sa pagtatrabaho sa cookies, hindi mo kailangang magkonekta ng anuman dito.

1. Pagtatakda ng Cookies

Upang magtakda ng cookies sa PHP, gagamitin namin ang built-in na "setcookie" function:

Anong meron dito?

“cookie_name” – pangalan ng cookie;

“cookie_value” – halaga ng cookie;

“time()+3600” – buhay ng cookie sa mga segundo (sa aming kaso – 1 oras). Kung itinakda mo ang panghabambuhay sa "0", ang cookie ay tatanggalin sa sandaling isara ang browser;

“/” – ang seksyon kung saan available ang cookies (sa aming kaso, available sa buong site). Kung gusto mong limitahan ang seksyon kung saan magiging available ang cookies, pagkatapos ay palitan ang “/”, halimbawa, ng “/audio/rock”;

“your_site.ru” – ang domain kung saan magiging available ang cookie;

“true” – isang parameter na nagsasaad na available lang ang cookie sa pamamagitan ng secure na https protocol. Kung hindi, ang halaga ay hindi totoo;

“false” – isang parameter na nagsasaad na ang cookie ay available sa mga scripting language. Kung hindi - totoo (magagamit lamang sa pamamagitan ng http).

Dito, masyadong, hindi lahat ng mga parameter ay kinakailangan, at upang lumikha ng cookies kakailanganin mo lamang ang sumusunod na konstruksyon:

Para sa kaginhawahan, maaaring itakda ang halaga ng cookie sa pamamagitan ng isang variable:

2. Pagtanggap ng Cookie

Upang makatanggap ng cookies, kailangan mong gamitin ang:

$_COOKIE["cookie_name"];

Upang alisin ang mga error dahil sa posibleng nawawalang cookies, gamitin ang:

Tulad ng sa nakaraang halimbawa ng pagtatrabaho sa Cookies sa jQuery, maaaring italaga ang cookies sa isang variable:

3. Pag-alis ng Cookies

Ang pag-alis ng cookies sa PHP ay kasingdali ng sa jQuery. Ang kailangan mo lang gawin ay itakda ang cookie sa isang walang laman na halaga at isang negatibong oras (oras na lumipas na):

Setcookie("cookie_name", "", time() - 3600);

Ang oras sa halimbawang ito ay isang oras na ang nakalipas, na sapat na para tanggalin ang cookies.

Gusto kong tandaan na sa ilang mga kaso, ang paggamit ng cookies ay higit na makatwiran kaysa sa paggamit ng database upang ipatupad ang kinakailangang paggana.

Ngayon ay haharapin natin ang mga cookies. Ang cookie ay isang maliit na piraso ng impormasyon na maaaring maimbak sa browser ng isang user.

Ang impormasyong ito ay magagamit sa tuwing bumibisita ang isang user sa isang pahina sa aming website. Maaari mong, halimbawa, kapag ang user ay unang bumisita sa pahina, tanungin siya para sa kanyang petsa ng kapanganakan, at pagkatapos, kapag dumating ang kanyang kaarawan, batiin siya. O maaari mong ipakita sa gumagamit ang isang banner na may isang pindutan

O maaari mong ipakita sa user ang isang banner na may button na "huwag ipakita sa loob ng 1 araw". Sa pamamagitan ng pag-click sa button na ito, mawawala ang banner, ngunit ang impormasyon tungkol sa sandali kung kailan ito nangyari ay nakasulat sa cookie - at eksaktong isang araw mamaya lilitaw muli ang banner.

Bilang karagdagan, maaari kang gumawa ng cookies hindi lamang mula sa JavaScript, kundi pati na rin mula sa PHP (kung saan kinakailangan, halimbawa, upang mag-imbak ng pahintulot ng user), tingnan ang pagtatrabaho sa cookies sa PHP kung kinakailangan.

Sa pangkalahatan, ang cookies ay isang kapaki-pakinabang na bagay at maaari kang gumawa ng maraming kawili-wiling bagay dito. Alamin natin kung paano gumawa ng cookies sa pamamagitan ng JavaScript.

Sa kasamaang palad, ang pagtatrabaho sa cookies sa JavaScript ay ipinapatupad nang kakila-kilabot at hindi mo ito magagawa nang walang saklay, ngunit mas mahusay na gumamit na lamang ng mga handa na aklatan.

Kaya simulan na natin.

Mga Pangunahing Kaalaman sa Cookie

Maaaring ma-access ang cookies na nakaimbak sa browser gamit ang document.cookie . Gamit ang property na ito, maaaring isulat at basahin ang cookies.

Sa document.cookie, ang cookies ay iniimbak lamang bilang isang string. Ang linyang ito ay binubuo ng mga pares cookie_name=cookie_value, na nakalista na pinaghihiwalay ng mga semicolon at mga puwang "; ".

Halimbawa: "pangalan=Vasya; edad=25" .

Upang magsulat sa isang cookie, kailangan mo lang magtalaga ng cookie na may pangalan nito sa document.cookie:

Document.cookie = "pangalan=Vasya";

Kapag nagsusulat ng bagong cookie, ang cookies na nandoon na ay hindi mapapatungan. Tingnan natin ang isang halimbawa - unti-unti kaming magsusulat ng bagong cookies at agad na ipapakita ang kasalukuyang nilalaman ng document.cookie:

Document.cookie = "pangalan=Vasya"; alerto(document.cookie); //will display "name=Vasya" document.cookie = "age=25"; alerto(document.cookie); //ay ipapakita ang "pangalan=Vasya; edad=25"

Kung magtatakda ka ng cookie na may parehong pangalan sa iba't ibang mga halaga, ang bagong halaga ay mao-overwrite ang nauna:

Document.cookie = "pangalan=Vasya"; alerto(document.cookie); //will display "name=Vasya" document.cookie = "name=Dima"; alerto(document.cookie); //ay ipapakita ang "name=Dima"

Kapag nag-eksperimento ka sa cookies, tandaan na ang naka-install na cookies ay hindi nawawala sa document.cookie at ang aking mga halimbawa ng code ay maaaring hindi gumana para sa iyo nang eksakto tulad ng ipinapakita - makikita mo rin ang dating naka-install na cookies.

Pagkuha ng cookies sa kanyang pangalan

Kaya, natukoy na namin na ang cookies ay nakaimbak bilang isang simpleng string, halimbawa, "pangalan=Vasya; edad=25; suweldo=1000". Lumalabas na upang mahanap, halimbawa, ang halaga ng isang cookie na pinangalanang edad, kailangan mong makuha ito mula sa string na ito sa ilang paraan: halimbawa, gamit ang mga function para sa pagtatrabaho sa mga string o regular na expression.

Ang karagdagang pangangatwiran ay hindi magiging malinaw sa iyo nang walang kaalaman sa mga regular na expression, tingnan muna ang tutorial sa mga regular na expression. O laktawan lamang ang mga talakayang ito at gamitin ang handa na function nang hindi sinisiyasat ang kakanyahan nito.

Subukan nating magsulat ng regex na kumukuha ng halaga ng cookie na may pangalang edad:

Document.cookie = "edad=25"; var age = document.cookie.match(/age=(.+?);/); alerto(edad); //maglalabas ng 25

Gayunpaman, ang regular na pattern na ito ay hindi perpekto at sa ilalim ng ilang mga kundisyon ay maaaring hindi gumana o hindi gumana nang tama.

Una, sa aming regular na code ay mayroong semicolon sa dulo - ang separator ng iba't ibang cookies sa document.cookie. Ngunit tingnan nating mabuti ang aming linya na may cookies - "name=Vasya; age=25; salary=1000" - ang huling cookie ay walang semicolon sa dulo! At hindi kukunin ng aming regular na team ang cookie na ito.

Kailangan mong baguhin ito at sabihin na ang cookie ay nagtatapos sa alinman sa isang semicolon o sa dulo ng linya. Baguhin: /age=(.+?)(;|$)/ .

Pangalawa, dapat kang magdagdag ng bahagi ng regular na expression bago ang pangalan ng cookie - ang pangalang ito ay maaaring unahan ng isang puwang o simula ng isang linya kung ang cookie ang una. Idagdag natin: /(^|\s)age=(.+?)(;|$)/ .

Maaaring walang laman ang halaga ng cookie, halimbawa, kung sumulat kami sa document.cookie tulad nito: "age=". Isaalang-alang natin ito sa ating regular na gawain - palitan ang + ng *. Palitan: /(^|\s)age=(.*?)(;|$)/ .

Ipakilala natin ngayon ang mga hindi nag-iingat na panaklong upang hindi lumikha ng mga hindi kinakailangang bulsa: /(?:^|\s)age=(.*?)(?:;|$)/ .

Ngayon, ipatupad natin ang getCookie() function, na kukuha ng pangalan ng arbitrary cookie bilang parameter at ibabalik ang halaga nito. Ito ang function:

Function getCookie(pangalan) ( var matches = document.cookie.match(new RegExp("(?:^|\s)" + name + "=(.*?)(?:;|$)";)); balikan ang mga laban)

Gayunpaman, mayroon kaming problema: maaaring maglaman ang variable ng pangalan ng mga espesyal na character (mga regular na expression command) na sisira sa aming regular na expression. Takasan natin ang lahat ng character na ito (palitan sila ng sarili nilang mga character, ngunit may tumatakas na backslash sa harap):

Pangalan = name.replace(/([.$\/?*+\\()|()\[\]^])/g, "\\$1") + "=(.*?);

Isinasaalang-alang ang pagwawasto na ito nakukuha natin ang mga sumusunod:

Function getCookie(pangalan) ( var matches = document.cookie.match(new RegExp("(?:^|\s)" + name.replace(/([.$?*+\\\/()|() \[\]^])/g, "\\$1") + "=(.*?)(?:;|$)";));

Ngayon tingnan natin ang mga tugma. Kung umiiral ang cookie, maayos ang lahat, ngunit kung wala ito, ibalik natin ang hindi natukoy :

Kung (magkatugma) (magbalik ng mga tugma;) iba pa (magbalik ng hindi natukoy;)

Isulat muli natin ito kung sa isang pinaikling bersyon:

Ibalik ang mga tugma? mga tugma: undefined;

Isinasaalang-alang ang pagwawasto, nakukuha namin ang sumusunod na code:

Function getCookie(pangalan) ( var matches = document.cookie.match(new RegExp("(?:^|\s)" + name.replace(/([.$?*+\\\/()|() \[\]^])/g, "\\$1") + "=(.*?)(?:;|$)";));

Ngayon ay isaalang-alang natin na ang ilang mga browser ay nagsasagawa ng url encoding cookies at nagde-decode ng mga ito pabalik gamit ang decodeURIComponent:

Function getCookie(pangalan) ( var matches = document.cookie.match(new RegExp("(?:^|\s)" + name.replace(/([.$?*+\\\/()|() \[\]^])/g, "\\$1") + "=(.*?)(?:;|$)";));

Ito ay isang handa na function para sa pagkuha ng cookie na kailangan mo (kinuha mula dito learn.javascript.ru/cookie, bahagyang naitama ko lang ang regular na expression at ipinaliwanag kung paano ito gumagana).

Mga karagdagang setting ng cookie

Hindi lang iyon: may mga karagdagang setting ang cookies na pinakamadalas mong gustong tukuyin.

Tinukoy ang mga setting na ito pagkatapos ng key=value pair, bawat isa pagkatapos ng semicolon. Isang bagay na tulad nito:

Document.cookie = "pangalan=Vasya; setting1=value1; setting2=value2";

Folder ng pag-install

Ang unang setting na titingnan natin ay ang folder ng site kung saan nakatakda ang cookie. Ito ay isang napakahalagang setting, dahil ang cookies kung wala ito ay hindi gumagana sa lahat tulad ng inaasahan namin - kapag nagtatakda ng cookie, sa tingin namin na ito ay magagamit sa buong site, ngunit ito ay magagamit lamang sa folder ng pag-install at mga subfolder nito.

Halimbawa: ang iyong website site.ru at ikaw, habang nasa page na site.ru/folder/, magtakda ng cookie. Kaya: ang cookie na ito ay magiging available sa page site.ru/folder/, sa page site.ru/folder/subfolder/ at iba pa, ngunit hindi magiging available, halimbawa, sa page site.ru/somefolder/ .

Ito ay napaka hindi inaasahang pag-uugali. Upang ayusin ito mayroong isang setting ng landas. Kadalasan ito ay ginagamit tulad nito: path=/ - at ang cookie ay nakatakda sa buong site. Halimbawa:

Document.cookie = "pangalan=Vasya; landas=/";

Maaari mo ring tukuyin ang isang partikular na folder, halimbawa path=/folder :

Document.cookie = "pangalan=Vasya; landas=/folder";

Domain ng pag-install

Ang susunod na setting ng domain ay tumutukoy sa domain kung saan nakatakda ang cookie. Bilang default, ito ang kasalukuyang domain (ngunit hindi ang mga subdomain nito). Maaari mong tukuyin na partikular na available ang cookie sa isang subdomain. Halimbawa, ang aming domain ay site.ru, at magtatakda kami ng cookie para sa forum.site.ru:

Document.cookie = "pangalan=Vasya; landas=/; domain=forum.site.ru";

Kung tumukoy ka ng isang espesyal na mask .site.ru, ang cookie ay magiging available sa site at lahat ng mga subdomain nito:

Document.cookie = "pangalan=Vasya; landas=/; domain=.site.ru";

Habang buhay

Ang lahat ng cookies ay tatagal lamang sa isang tiyak na tagal ng panahon. Bilang default, ang cookies ay hindi tumatagal ng napakatagal - hanggang sa isara lamang ang browser. Kadalasan ay hindi kami nasisiyahan dito at gusto naming patagalin ang cookies.

Upang gawin ito, gamitin ang setting na mag-e-expire, kung saan dapat mong itakda ang punto sa oras hanggang sa mabubuhay ang cookie. Nakatakda ang sandaling ito sa format na GMT. Ang format na ito ay maaaring makuha tulad nito: ginagamit namin ang bagay na Petsa, itakda ito sa anumang oras, at pagkatapos ay tawagan ang paraan ng toUTCString.

Itakda natin ang buhay ng cookie +1 araw mula ngayon:

Var date = bagong Petsa; date.setDate(date.getDate() + 1); petsa = date.toUTCString(); document.cookie = "pangalan=Vasya; landas=/; mag-e-expire="+petsa;

Tinatanggal ang cookies

Tinatanggal ang cookies sa isang kawili-wiling paraan: kailangan mong itakda ang kanilang buhay sa past tense, o itakda lang ito sa -1. Tanggalin natin ang aming cookie:

Document.cookie = "pangalan=; landas=/; mag-e-expire=-1";

Mga aklatan para sa pagtatrabaho sa cookies

Dahil ang pagtatrabaho sa cookies sa JavaScript ay sadyang kakila-kilabot, may mga aklatan na nagpapadali sa pagtatrabaho sa kanila. Galugarin ang mga aklatang ito sa iyong sarili.

Ginagawang posible ng JavaScript na magtakda at magbasa ng cookies sa browser. Sa araling ito, titingnan natin kung paano gumawa ng cookies, at gumawa din ng isang simpleng pahina na maaalala ang ipinasok na pangalan at ipapakita ito sa tuwing mag-log in ka.

Ano ang cookies?

Ang cookies ay isang maliit na halaga ng data na iniimbak ng isang web browser. Nagbibigay-daan sa iyo ang mga ito na mag-imbak ng ilang partikular na impormasyon tungkol sa user at makuha ito sa tuwing bibisita siya sa iyong page. Ang bawat user ay may sariling natatanging hanay ng cookies.

Karaniwan, ang cookies ay ginagamit ng web server upang magsagawa ng mga function tulad ng pagsubaybay sa mga pagbisita sa site, pagpaparehistro sa site, at pag-iimbak ng impormasyon tungkol sa mga order o pagbili. Gayunpaman, hindi namin kailangang mag-imbento ng isang web server program para gumamit ng cookies. Magagamit natin ang mga ito gamit ang JavaScript.

Ang document.cookie property.

Sa JavaScript, ina-access ang cookies gamit ang cookie property ng object ng dokumento. Maaari kang lumikha ng cookies tulad ng sumusunod:

At kunin ang buong naka-save na set ng cookies tulad nito:

Var x = document.cookie;

Tingnan natin ang pag-save at pagkuha ng cookies nang mas detalyado.

Nagse-save ng cookies

Upang mag-save ng cookie, kailangan naming magtalaga ng document.cookie sa isang text string na naglalaman ng mga katangian ng cookie na gusto naming gawin:

document.cookie = " pangalan = halaga; mag-e-expire = petsa; landas = landas; domain = domain; secure";

Ang mga katangian ay inilarawan sa talahanayan:

Halimbawa ng Paglalarawan ng Ari-arian
pangalan = halaga Itinatakda ang pangalan ng cookie at ang halaga nito. username=Vasya
mag-e-expire= petsa Itinatakda ang petsa ng pag-expire para sa cookies. Ang petsa ay dapat nasa format na ibinalik ng Date object's toGMTString() method. Kung ang pag-expire ay hindi tinukoy, ang cookie ay tatanggalin kapag ang browser ay sarado. mawawalan ng bisa=
13/06/2003 00:00:00
landas = landas Itinatakda ng opsyong ito ang landas sa site kung saan wasto ang cookie. Ang mga dokumento lamang mula sa tinukoy na landas ang maaaring makuha ang halaga ng cookie. Karaniwan ang property na ito ay naiwang walang laman, na nangangahulugan na tanging ang dokumentong nagtatakda ng cookie ang makaka-access dito. landas=/demo/
domain=domain Itinatakda ng opsyong ito ang domain kung saan gumagana ang cookie. Ang mga site lamang mula sa tinukoy na domain ang makakatanggap ng halaga ng cookie. Karaniwang naiwang walang laman ang property na ito, na nangangahulugan na ang domain lang na nagtakda ng cookie ang makaka-access dito. domain=website
ligtas Sinasabi ng opsyong ito sa browser na gumamit ng SSL para magpadala ng cookies sa server. Napakadalang gamitin. ligtas

Tingnan natin ang isang halimbawa ng pagtatakda ng cookies:

document.cookie = "username=Vasya; mag-e-expire=02/15/2011 00:00:00";

Itinatakda ng code na ito ang cookie ng username at itinatalaga dito ang value na "Vasya", na maiimbak hanggang Pebrero 15, 2011 (Ginagamit ang format ng oras na European!).

var cookie_date = bagong Petsa(2003, 01, 15); document.cookie = "username=Vasya; expires=" + cookie_date.toGMTString();

Ang code na ito ay eksaktong kapareho ng sa nakaraang halimbawa, ngunit gumagamit ng Date.toGMTString() na paraan upang itakda ang petsa. Pakitandaan na ang month numbering sa Date object ay nagsisimula sa 0, ibig sabihin, February ay 01.

Document.cookie = "logged_in=yes";

Itinatakda ng code na ito ang naka-log_in na cookie at itinatakda ito sa "oo". Dahil hindi nakatakda ang attribute na nag-expire, tatanggalin ang cookie kapag isinara ang browser.

var cookie_date = bagong Petsa(); // Kasalukuyang petsa at oras cookie_date.setTime (cookie_date.getTime() - 1); document.cookie = "logged_in=; expires=" + cookie_date.toGMTString();

Itinatakda ng code na ito ang cookie na naka-log_in at itinatakda ang string ng imbakan sa oras isang segundo bago ang kasalukuyang oras - agad na tatanggalin ng operasyong ito ang cookie. Manu-manong paraan upang tanggalin ang cookies!

Nire-recode ang halaga ng cookie!

Dapat i-recode ang cookie value para maimbak at maipakita nang tama ang mga character gaya ng space at colon. Tinitiyak ng operasyong ito na nabibigyang-kahulugan nang tama ng browser ang halaga. Ang Lego recoding ay ginagawa ng JavaScript escape() function. Halimbawa:

document.cookie = "username=" + escape("Vasya Pupkin") + "; mag-e-expire=02/15/2003 00:00:00"; Function para sa pagtatakda ng cookies

Magiging mas madali ang pagtatakda ng cookies kung magsusulat kami ng isang espesyal na function na magsasagawa ng mga simpleng operasyon tulad ng pag-recoding ng mga halaga at pagbuo ng document.cookie string. Halimbawa:

Function set_cookie (pangalan, value, exp_y, exp_m, exp_d, path, domain, secure) ( var cookie_string = name + "=" + escape (value); if (exp_y) ( var expires = bagong Petsa (exp_y, exp_m, exp_d ); cookie_string += "; expires=" + expires.toGMTString(); (domain); kung (secure) cookie_string += "; secure";

Kinukuha ng function ang data ng cookie bilang mga argumento, pagkatapos ay gagawa ng naaangkop na string at itinatakda ang cookie.

Halimbawa, ang pagtatakda ng cookies na walang petsa ng pag-expire:

set_cookie("username", "Vasya Pupkin"); set_cookie ("username", "Vasya Pupkin", 2011, 01, 15);

Pagtatakda ng cookies na may panahon ng storage, domain ng site, gamit ang SSL, ngunit walang path:

set_cookie ("username", "Vasya Pupkin", 2003, 01, 15, "", "site", "secure"); Function para sa pagtanggal ng cookies.

Ang isa pang kapaki-pakinabang na function para sa pagtatrabaho sa cookies ay ipinakita sa ibaba. Ang function na "tinatanggal" ang cookies mula sa browser sa pamamagitan ng pagtatakda ng petsa ng pag-expire sa isang segundo na mas maaga kaysa sa kasalukuyang halaga ng oras.

function na delete_cookie (cookie_name) ( var cookie_date = bagong Petsa (); // Kasalukuyang petsa at oras cookie_date.setTime (cookie_date.getTime() - 1); document.cookie = cookie_name += "=; expires=" + cookie_date.toGMTString ();

Upang magamit ang function na ito, kailangan mo lamang ipasa dito ang pangalan ng cookie na tatanggalin:

Delete_cookie("username");

Pagkuha ng halaga ng cookie

Upang makuha ang halaga ng isang paunang itinakda na cookie para sa kasalukuyang dokumento, kailangan mong gamitin ang document.cookie property:

Var x = document.cookie;

Nagbabalik ito ng string na binubuo ng isang listahan ng mga pares ng pangalan/halaga na pinaghihiwalay ng mga semicolon para sa lahat cookies na wasto para sa kasalukuyang dokumento. Halimbawa:

"username=Vasya; password=abc123"

Sa halimbawang ito, mayroong 2 cookies na na-pre-set: username, na may value na "Vasya", at password, na may value na "abc123".

Pag-andar upang makakuha ng halaga ng cookie

Karaniwan, kailangan lang namin ang halaga ng isang cookie sa bawat pagkakataon. Samakatuwid, ang cookie string ay hindi maginhawang gamitin! Narito ang isang function na nagpoproseso ng string document.cookies , ibinabalik lamang ang cookies na interesado sa isang partikular na sandali:

Function get_cookie (cookie_name) ( var results = document.cookie.match ("(^|;) ?" + cookie_name + "=([^;]*)(;|$)"); kung (mga resulta) bumalik (unescape (mga resulta));

Gumagamit ang function na ito ng isang regular na expression upang mahanap ang pangalan ng cookie na interesado, at pagkatapos ay ibabalik ang halaga, na pinoproseso ng unescape() function upang muling i-encode ito sa normal na anyo ng character. (Kung hindi mahanap ang cookie, ibabalik ang null.)

Ang tampok na ito ay madaling gamitin. Halimbawa, upang ibalik ang halaga ng cookie ng username:

Var x = get_cookie("username");

Simpleng halimbawa ng paggamit

Sa halimbawang ito, gumawa kami ng page na humihingi ng iyong pangalan sa iyong unang pagbisita, pagkatapos ay ise-save nito ang iyong pangalan sa isang cookie at ipapakita ito sa mga susunod na pagbisita.

Buksan ang pahina sa isang bagong window. Sa iyong unang pagbisita, hihilingin sa iyong ilagay ang iyong pangalan at i-save ito sa isang cookie. Kung bibisitahin mong muli ang pahina, ipapakita nito ang pangalan ng cookie na iyong ipinasok sa screen.

Para sa cookies, itinakda namin ang panahon ng pagpapanatili sa 1 taon mula sa kasalukuyang petsa, nangangahulugan ito na ise-save ng browser ang iyong pangalan kahit na isara mo ito.

Maaari mong tingnan ang page code sa iyong browser sa pamamagitan ng pagpili sa opsyong View Source. Narito ang pangunahing bahagi ng code:

kung (! get_cookie ("username")) ( var username = prompt ("Pakilagay ang iyong pangalan", ""); kung (username) ( var current_date = bagong Petsa; var cookie_year = current_date.getFullYear () + 1; var cookie_month = current_date.getMonth(); var cookie_day = current_date.getDate();set_cookie("username", username, cookie_year, cookie_month, cookie_day) ) else( var username = get_cookie("username");document.write ("Hello , " + username + ", maligayang pagdating sa pahina!"); document.write("
Kalimutan mo na ako!"); }

Ipinakita sa iyo ng araling ito kung paano gumamit ng cookies sa JavaScript upang mag-imbak ng impormasyon tungkol sa iyong mga bisita. Salamat sa iyong atensyon! :)

Ang cookie ay isang set ng data na nilikha ng isang Web server at ipinapadala sa tuwing maa-access ang server. Ang cookies ay iniimbak sa browser ng user. Karaniwan, ginagamit ang cookies upang: mag-imbak ng iba't ibang setting na natatangi sa user, pagpapatunay ng user, iba't ibang istatistika at iba pang katulad na bagay. At pag-uusapan natin ang tungkol sa pagtatrabaho sa cookies sa PHP sa artikulong ito.

Magsimula tayo sa pinakasimpleng bagay: pagsulat ng cookies sa browser ng user. Mayroong isang setcookie() function para dito:

Pagkatapos patakbuhin ang script, makikita mo ang cookie. Maaari mong tingnan ang mga ito sa sumusunod na paraan: alinman sa paghahanap sa mga setting ng iyong browser, o direktang maghanap sa iyong hard drive kung saan naka-imbak ang cookies ng iyong browser, o (ang pinakamadaling paraan) ilagay sa address bar: “javascript:document.cookie”. Ipasok lamang ang parehong tab kung saan mo pinatakbo ang script, dahil pinaghihiwalay ng mga browser ang cookies ng isang site mula sa isa pa.

Ngayon ang tanong ay lumitaw: "Paano ipakita ang cookies?". Ang mga ito ay ipinapakita gamit ang $_COOKIE array:

Bilang resulta, makikita mo ang "Value". Gaya ng nakikita mo, elementarya ang lahat.

At ngayon lutasin natin ang problemang ito sa iyo: kung ang user ay awtorisado sa site, pagkatapos ay kamustahin siya, kung hindi man ay ipakita ang form sa pag-login. Bukod dito, kung ang data na ipinasok sa form ay hindi tama, pagkatapos ay magpakita ng kaukulang babala. Mukhang ganito ang pagpapatupad:








Ang code ay medyo transparent, gayunpaman, ang artikulong ito ay maaari ding basahin ng mga nagsisimula, kaya tingnan natin ang code na ito nang mas detalyado. Una, sumulat kami ng dalawang function: ang isa ay upang ipakita ang form sa pag-login, at ang pangalawang function ay nagbabalik ng true kung ang data ay tama (iyon ay, kung ang login ay"Admin ", а пароль - "123456 "), иначе возвращает false . Обратите внимание на $_SERVER["SCRIPT_NAME"] . Данная константа содержит путь к текущему файлу. То есть мы хотим, чтобы обработчик формы (значение атрибута action ) был этот же файл.!}

Susunod na suriin namin kung ang form ay isinumite (kung ang naipasa na "log" na halaga ay umiiral). Kung mayroon ito, ipinadala na ang form at sinimulan naming suriin ang natanggap na data. Pakitandaan na ipinapasa namin ang password sa pamamagitan ng md5() function upang hindi maimbak ang password sa malinaw na text sa cookie. Gamit ang check() function na sinusuri namin kung tama ang data. Kung tama ang data, pagkatapos ay isusulat namin ito sa isang cookie, kung hindi, ipinapakita namin ang linyang: "Di-wastong data".

Susunod, magsisimula kaming mag-output ng mga HTML tag. Pakitandaan na hindi namin magagamit ang setcookie() function pagkatapos naming magkaroon ng output sa browser. Iyon ay, hindi mo maaaring, halimbawa, magpakita ng mga HTML na tag at pagkatapos ay gamitin ang setcookie() function, kung hindi, magkakaroon ng error. At, maniwala ka sa akin, maraming mga baguhan ang tumatanggap nito.

Pagkatapos i-output ang mga HTML tag, dumating tayo sa punto kung saan kailangan nating suriin ang cookie. Binabasa namin ang mga ito at pagkatapos ay suriin ang mga ito. Kung tama ang mga ito, binabati namin ang gumagamit, kung hindi, ipinapakita namin ang form sa pag-login.

Iyan ang buong script, tulad ng nakikita mo, maaari mong malaman ito. Gayunpaman, mayroon itong isang depekto dahil sa katotohanang naglalabas kami ng "Di-wastong data" bago ang tag na " ". Samakatuwid, ang aking araling-bahay: ayusin ang error na ito upang walang paglabag sa bisa ng HTML code. Ito ay napakasimpleng gawin, gayunpaman, ito ay magiging lubhang kapaki-pakinabang, dahil kailangan mong maunawaan ang code na ito, at, samakatuwid, alamin kung paano gumana sa cookies sa PHP. At kailangan mong gumamit ng cookies sa PHP nang madalas, at susubukan kong pagsamahin ang iyong kaalaman tungkol sa mga ito sa mga sumusunod na artikulo.