Php ako nastaviť cookies pre konkrétnu stránku. PHP funkcie. Vytváranie cookies v PHP

  • 20.06.2020

PHP transparentne podporuje HTTP cookies. Súbory cookie sú mechanizmom na ukladanie údajov vo vzdialenom prehliadači a tým na sledovanie alebo identifikáciu vracajúcich sa používateľov. Súbory cookie môžete nastaviť pomocou súbor cookie () alebo setrawcookie () funkciu. Súbory cookie sú súčasťou hlavičky HTTP, takže súbor cookie () musí byť zavolané pred odoslaním akéhokoľvek výstupu do prehliadača. Toto je rovnaké obmedzenie hlavička () má. Funkcie ukladania do vyrovnávacej pamäte pre výstup môžete použiť na oneskorenie výstupu skriptu, kým sa nerozhodnete, či chcete nastaviť nejaké súbory cookie alebo odoslať hlavičky.

Všetky súbory cookie odoslané na server z klienta budú automaticky zahrnuté do automatického globálneho poľa $ _COOKIE, ak variables_order obsahuje „C“. Ak chcete jednému súboru cookie priradiť viacero hodnôt, stačí ich pridať na názov súboru cookie.

pred 15 rokmi

Len všeobecný komentár k úryvku Wiltonovho kódu: Vo všeobecnosti sa považuje za veľmi zlú prax ukladať používateľské mená a/alebo heslá do súborov cookie bez ohľadu na to, či sú alebo nie sú zatemnené. Mnoho spywarových programov sa snaží kradnúť obsah súborov cookie.

Oveľa lepším riešením by bolo použiť obslužný program relácie zabudovaný v PHP alebo vytvoriť niečo podobné pomocou vlastného ID relácie založeného na súboroch cookie. Toto ID relácie môže byť prepojené so zdrojovou IP adresou alebo môže byť podľa potreby vypršané, ale keďže platnosť ID môže vypršať oddelene od kritérií autentifikácie, samotná autentifikácia nie je ohrozená.

Stuart žije

pred 9 mesiacmi

zrušiť nastavenie ($ _ COOKIE ["cookie"]);
?>

Apenas apaga um indice de uma variável, os cookies ainda vão existir e continuar a ser enviados do servidor pre cliente and vice-versa.
Assim ako isso:

$ _COOKIE ["cookie"] = "foo bar";
?>

Não cria ou altera o valor do cookie, apenas durante a execução atual, o valor que será passado do servidor pro cliente e vice-versa será o original

Para excluir ou alterar deve SEMPER sobre escrever o valor antigo com setcookie (), setrawcookie () ou header (), sendo este último não muito comum e dificilmente terá um uso justificável

pred 13 rokmi

pred 13 rokmi

V reakcii na riešenie uverejnené v komentári nižšie existuje niekoľko praktických problémov s týmto riešením, ktoré musíte mať na pamäti a musíte ich riešiť pomocou vášho kódu. Vyvinul som aplikáciu používajúcu podobný kľúč „použite raz“ na správu relácií a fungovalo to skvele, dostali sme však niekoľko sťažností na to, že sa legitímni používatelia bezdôvodne odhlásili. Ukázalo sa, že problémom nebol pokusný highjacking, bol to buď:

A- Používatelia dvakrát kliknú na odkazy alebo urobia 2 kliknutia veľmi rýchlo. Na 2 kliknutia sa odošle rovnaký kľúč, pretože nový kľúč z prvého kliknutia sa „nedostal do prehliadača včas na druhé kliknutie, ale relácia na serveri kľúč pre nové kliknutie vyhodila do koša. spôsobí ukončenie relácie. (nainštalujte si rozšírenie LiveHttpHeaders na firefox a pozrite sa na hlavičky odoslané, keď dvakrát veľmi rýchlo kliknete, uvidíte rovnaký súbor cookie odoslaný na obe a nový súbor cookie sa zo servera vráti príliš neskoro).

B- Z akéhokoľvek dôvodu sa server spomalí a odpoveď s novým kľúčom (ktorý nahradil starý kľúč na serveri) sa prehliadaču nevráti dostatočne rýchlo. Používateľ sa unaví z čakania a klikne niekde inde. Bude odhlásený, pretože toto druhé kliknutie odošle starý kľúč, ktorý sa nezhoduje s kľúčom, ktorý máte na serveri.

Naším riešením bolo nastaviť ochrannú lehotu, v ktorej bol starý kľúč stále platný (aktuálny kľúč aj predchádzajúci kľúč boli vždy uchovávané, použili sme 15 sekúnd ako ochrannú lehotu, kedy sa starý kľúč mohol stále používať). Má to nevýhodu v tom, že zvyšuje časové okno, počas ktorého môže osoba hacknúť reláciu, ale ak prepojíte platnosť starého kľúča s adresou IP a/alebo reťazcom používateľského agenta, stále získate celkom dobrú bezpečnosť relácie s veľmi malým počtom nežiaducich ukončenie relácie.

pred 10 rokmi

Je lepšie si uvedomiť, že nepripájajte svoje cookies k IP a blokujte IP, ak je iná, pretože niektorí ľudia používajú prenosné prehliadače, ktoré si cookies zapamätajú. Ak adresa IP nezodpovedá IP súboru cookie relácie, je lepšie zobraziť prihlasovaciu obrazovku.

pred 14 rokmi

Našiel som riešenie na ochranu ID relácie bez toho, aby som ich viazal na IP klienta. Každé ID relácie poskytuje prístup iba JEDNOMU dopytu. Pri ďalšom dopyte sa vygeneruje a uloží ďalšie ID relácie. Ak niekto hackne súbor cookie (alebo ID relácie ), prvý z používateľa a pirát, ktorý použije súbor cookie, bude druhý odpojený, pretože bolo použité ID relácie.

Ak sa používateľ odpojí, znova sa pripojí: keďže mojou zásadou nie je mať pre každého používateľa viac ako jedno ID relácie (položky relácie majú UNIKÁTNY kľúč v stĺpci, v ktorom je uložené prihlásenie používateľa), všetky položky pre tohto používateľa sa vymažú , vygeneruje sa nové ID relácie a uloží sa na používateľský disk: pirát sa odpojí. To umožňuje pirátovi zvyčajne len niekoľko sekúnd konať. Čím pomalšie návštevníci prehliadajú, tým dlhší je čas pirátov na hackovanie. Tiež, ak používatelia zabudnú explicitne ukončiť svoje relácie... niektorí z mojich používateľov nastavia časový limit dlhší ako 20 minút!

DÔLEŽITÁ POZNÁMKA: Toto zakáže možnosť použitia tlačidla späť, ak odošlete ID relácie prostredníctvom POST alebo GET.

pred 12 rokmi

Ak chcete, aby zabezpečená relácia nebola viazaná na IP klienta, môžete použiť metódu valid-for-one-query nižšie, ale na ochranu pred scenárom, kedy legitímny používateľ klikne dvakrát, môžete použiť funkciu vypnutia (register_shutdown_function) *.

Skontroluje, či sa skript neukončil predčasne (connection_aborted), a obnoví platné ID relácie. Týmto spôsobom je stále platný, keď používateľ zadá druhú požiadavku. Ak sa skript skončí správne, použije sa namiesto neho nové ID relácie.

Keďže teraz nemôžete nastaviť súbor cookie z funkcie vypnutia (po odoslaní výstupu), súbor cookie by mal obsahovať predchádzajúce platné ID relácie aj nové. Potom skript servera určí (pri ďalšej požiadavke), ktoré jeden na použitie.

:: Pseudopríklad:
::
::
::
:: 1. Získajte ID relácie zo súboru cookie
:: 2. Ak je jedno z ID relácie stále platné (t. j. ak je s ním spojené úložisko – v databáze, súbore alebo čomkoľvek inom)
:: ____ 2.1. Otvorte reláciu
:: 3. Vygenerujte nové ID relácie
:: 4. Uložte nové ID relácie s tým, ktoré ste práve použili v súbore cookie
:: 5. Zaregistrujte funkciu vypnutia
::
::
::
:: 1. Ak scenár skončil predčasne
:: ____ 1.1. Uložte údaje relácie pomocou starého ID relácie
:: 2. Inak
:: ____ 2.1. Uložte údaje relácie pomocou nového ID relácie
:: ____ 2.2. Uistite sa, že staré ID relácie je pridané do zoznamu ID (používa sa na účely opísané nižšie)
:: ____ 2.3. Vyhoďte do koša staré úložisko relácie

Stále existuje možnosť, že nejaký deviantný sieťový sniffer zachytí súbor cookie relácie, ktorý je odoslaný klientovi a použije ho skôr, ako na to klient dostane príležitosť. Tak, úspešne únos relácie.

Ak sa použije staré ID relácie, musíme predpokladať, že relácia bola ukradnutá. Potom môže byť klient vyzvaný, aby zadal svoje heslo pred odoslaním údajov späť. Teraz, keďže musíme predpokladať, že heslo má iba legitímny používateľ, nepošleme späť žiadne údaje, kým nebude zaslané heslo z jednej žiadosti.

A nakoniec (ako vedľajšia poznámka) by sme mohli zakryť prihlasovacie údaje (ak má klient podporu pre javascript) tým, že zachytíme formulár pri jeho odosielaní, vezmeme aktuálnu časovú pečiatku a pridáme ju do formulára v dynamicky generovanom skrytom objekte formulára, nahraďte pole hesla novým heslom, ktoré je MD5 (alebo podobné) časovej pečiatky a skutočné heslo. Na strane servera skript vezme časovú pečiatku, pozrie sa na skutočné heslo používateľa a vytvorí správne MD5. Ak sa zhodujú, dobre, ak nie, mám ho! (To bude samozrejme fungovať len vtedy, keď máme používateľa s relácia, ktorá „je predtým prihlásený, keďže vieme, aké má mať heslo.) Ak sú poverenia používateľa uložené ako md5 (používateľské meno + heslo), jednoducho požiadajte o používateľské meno aj heslo, md5 ich a potom md5 časovú pečiatku a meno používateľa.

Ak potrebujete javascript pre md5.


V tomto článku vám poviem o tom, čo je cookie (preložené z angličtiny - cookies, ako obrázok), ako sa používajú, aké dôležité sú v modernom Runete a ako s nimi pracovať pomocou PHP.

Teraz trochu suché, ale povinné informácie, ktoré budú vysvetlené neskôr s príkladmi)

Cookie je súbor údajov (uložených ako textový súbor), ktoré vytvára webový server a odosiela sa pri každom prístupe na server. Súbory cookie sa ukladajú v prehliadači používateľa a zostavujú sa pre konkrétnu stránku.

Súbory cookie sa zvyčajne používajú na ukladanie technických údajov používateľa (jedinečná vyrovnávacia pamäť ID na automatické prihlásenie na stránku, osobné nastavenia a štatistiky), internetového zdroja (čo sledoval, na čo klikol) a všeobecných údajov o preferenciách (napríklad ako webové stránky venované autám, čo znamená, že môžu zobrazovať relevantné reklamy na iných stránkach – venujete tomu pozornosť? Ide o súbor cookie). Súbory cookie sa odstraňujú najmä dvoma spôsobmi: pomocou PHP a samočistením používateľa od súboru cookie jeho prehliadača.

Príklady zápisu PHP cookies

V prvom rade sa súbor cookie zapíše do prehliadača. Nižšie sú uvedené príklady zápisu, obnovovania, skracovania v PHP.
Na zaznamenávanie, predlžovanie, skracovanie doby platnosti cookies slúži súbor cookie.

// vytvoriť súbor cookie
setcookie ("Názov", "Hodnota", čas () + 3600); // vytvoril súbor cookie s názvom Názov, hodnota na 1 hodinu (3600 sekúnd)

// skrátenie doby platnosti
setcookie ("meno", "", čas () - 3600); // expirácia súboru cookie skrátená o hodinu
?>

Ako skontrolujem, či bola pre súbor cookie zapísaná hodnota?

setcookie ("Názov", "Hodnota", čas () + 3600); // vytvoriť súbor cookie
if (SetCookie ("Test", "Hodnota")) echo "

Súbory cookie boli úspešne nastavené!

";
// pri ďalšej požiadavke vypíše "Hodnota":
echo @ $ _ COOKIE ["Test"]; // zobrazenie súboru cookie. Pripomínam, že znak @ nezobrazuje chybu pri absencii súborov cookie
?>
V poslednom príklade pri zobrazovaní cookies na to používame špeciálne pole $ _COOKIE.

Ako vymažem cookies v PHP?

Na vymazanie cookies používame aj súbor cookie alebo odstaviť.

zrušiť nastavenie ($ _ COOKIE ["Názov"]); // prvý spôsob odstránenia cookies
setcookie ("Názov", "Hodnota", čas () - 1); // druhý spôsob - vziať a vypršať platnosť cookie
setCookie ("Meno", ""); // tretí spôsob je nechať hodnotu prázdnu
?>

Napísanie prvého skriptu pomocou cookies v PHP - prihlasovací formulár

A teraz s vami vyriešme nasledujúci problém: ak je používateľ autorizovaný na stránke, pozdravte ho, inak zobrazte prihlasovací formulár. Okrem toho, ak sú údaje zadané vo formulári nesprávne, zobrazí sa príslušné upozornenie. Implementácia vyzerá takto:

// zobrazenie formulára na zadávanie údajov
// po kliknutí na "Prihlásiť sa" sa stránka obnoví
funkcia showForm () (
$ string = "

";
$ reťazec. = " ";
$ reťazec. = " ";
$ reťazec. = "";
$ reťazec. = " ";
$ reťazec. = " ";
$ reťazec. = "";
$ reťazec. = " ";
$ reťazec. = "
";
return $ string;
}
// skontrolujte údaje zadané používateľom. Ak je pravda, vráti hodnotu true
kontrola funkcie ($ login, $ pass) (
if (($ login == "admin") && ($ pass == md5 ("12345"))) return true;
inak vráti false;
}
// teraz píš
if (isset ($ _ POST ["log"])) (
$ login = $ _POST ["prihlásenie"];
$ pass = md5 ($ _ POST ["pass"]);
if (check ($ login, $ pass)) (
setcookie ("prihlásenie", $ prihlásenie);
setcookie ("pass", $ pass);
}
else echo "Zadali ste nesprávne údaje. Skúste to znova";
}
?>




setcookie ("prihlásenie", $ prihlásenie);
setcookie ("pass", $ pass);
// nižšie je duplikát predchádzajúceho kódu, ktorý vám umožňuje implementovať skript v rámci jednej stránky
$ login = $ _COOKIE ["prihlásenie"];
$ pass = $ _COOKIE ["pass"];
if (check ($ login, $ pass)) echo "Ahoj $ login";
else echo showForm ();
?>




Pozeráme sa na výsledok práce. Po ukážke si určite prečítajte popis fungovania kódu.

Kód a jeho logika sú jednoduché. V hornej časti sme vytvorili handlerské funkcie: zobrazenie prihlasovacieho formulára, kontrola súladu údajov (ak sú úspešné, tak vráti true, ak sa údaje nezhodujú, tak sú nepravdivé):

Potom napíšeme cookies.

Venujte pozornosť $ _SERVER (možno nahradiť $ _SERVER). Táto konštanta obsahuje cestu k aktuálnemu súboru. V dôsledku spracovania formulára (hodnota atribútu action) pristupuje k rovnakej ceste k tomuto súboru.

Ďalším krokom je kontrola, či bol formulár odoslaný (či bola odovzdaná hodnota protokolu, teda či ste klikli na tlačidlo Prihlásiť). Ak áno, skontrolujú sa prihlasovacie údaje a údaje o prechode. Je potrebné poznamenať, že heslo sa neprenáša vo svojej čistej forme, ale je šifrované vstavanou funkciou PHP na šifrovanie údajov md5 ().

Porovnanie hesla v tomto skripte prebieha podľa modelu šifrujeme (heslo z formulára) je to isté ako šifrovanie (predvolené heslo)... Ak je kontrola úspešná, dostaneme hodnotu true a potom sa zapíše súbor cookie. Ak nie, zobrazí sa hlásenie - zadali ste nesprávne údaje. Prosím skúste znova. A opäť zobrazíme autorizačný formulár s HTML tagmi.

Ďakujem za pozornosť!

Cookie je množina údajov, ktorá sa vytvára webový server a ktorý sa odošle pri každom prístupe na server. Cookie sú uložené v prehliadači používateľa. zvyčajne cookie používa sa na: ukladanie rôznych nastavení jedinečných pre používateľa, autentifikáciu používateľa, rôzne štatistiky a iné podobné veci. A o práca s cookies v PHP budeme hovoriť v tomto článku.

Začnime tými najjednoduchšími vecami: s zapísanie súboru cookie do prehliadača používateľa... Na to existuje funkcia súbor cookie ():

setcookie ("Názov", "Hodnota");
?>

Po spustení skriptu môžete pozri cookie... Môžete si ich prezrieť nasledovne: buď hľadať v nastaveniach prehliadača, alebo hľadať priamo na pevnom disku, kde sú uložené cookie Váš prehliadač alebo (najjednoduchší spôsob) zadajte do panela s adresou: " javascript: document.cookie". Zadajte iba na rovnakej karte, na ktorej ste spustili skript, pretože prehliadače sú oddelené cookie z jednej lokality z druhej.

Teraz vyvstáva otázka: " Ako zobraziť súbory cookie? Zobrazujú sa pomocou poľa $ _COOKIE:

echo $ _COOKIE ["Meno"];
?>

V dôsledku toho uvidíte " Hodnota"Ako vidíte, všetko je elementárne.

A teraz s vami vyriešime nasledujúci problém: ak je používateľ na stránke autorizovaný, pozdravte ho, v opačnom prípade zobrazte prihlasovací formulár. Okrem toho, ak sú údaje zadané vo formulári nesprávne, zobrazí sa príslušné upozornenie. Implementácia vyzerá takto:

funkcia showForm () (
$ string = "

";
$ reťazec. = " ";
$ reťazec. = " ";
$ reťazec. = "
";
$ reťazec. = " ";
$ reťazec. = " ";
$ reťazec. = "
";
$ reťazec. = " ";
$ reťazec. = "
";
return $ string;
}
kontrola funkcie ($ login, $ pass) (
if (($ login == "Admin") && ($ pass == md5 ("123456"))) return true;
inak vráti false;
}
if (isset ($ _ POST ["log"])) (
$ login = $ _POST ["prihlásenie"];
$ pass = md5 ($ _ POST ["pass"]);
if (check ($ login, $ pass)) (
setcookie ("prihlásenie", $ prihlásenie);
setcookie ("pass", $ pass);
}
else echo "Neplatné údaje";
}
?>




$ login = $ _COOKIE ["prihlásenie"];
$ pass = $ _COOKIE ["pass"];
if (check ($ login, $ pass)) echo "Ahoj $ login";
else echo showForm ();
?>



Kód je celkom prehľadný, tento článok si však môžu prečítať aj začiatočníci, preto si tento kód rozoberme podrobnejšie. Najprv napíšeme dve funkcie: jednu na zobrazenie prihlasovacieho formulára a druhú funkciu vráti pravda ak sú údaje správne (teda ak je prihlasovacie meno " Admin"a heslo je" 123456 "), inak sa vráti falošné... dávaj pozor na $ _SERVER ["SCRIPT_NAME"]... Táto konštanta obsahuje cestu k aktuálnemu súboru. To znamená, že chceme obslužný program formulára (hodnota atribútu akcie) bol rovnaký súbor.

Ďalej skontrolujeme, či bol formulár odoslaný (či existuje odovzdaná hodnota " log"). Ak existuje, potom bol formulár odoslaný a začneme overovať prijaté údaje. Upozorňujeme, že heslo odovzdávame cez funkciu md5 () aby sa heslo neuložilo cookie v otvorenej forme. Pomocou funkcie skontrolovať () skontrolujeme, či sú údaje správne. Ak sú údaje správne, zapíšeme ich do cookie, inak vypíšeme riadok: " Nesprávne údaje".

Ďalej začneme s výstupom HTML tagy... Upozorňujeme, že nemôžeme použiť funkcia setcookie (). potom, čo ste niečo priniesli do prehliadača. To znamená, že nemôžete napríklad zobraziť HTML tagy a potom použite funkciu súbor cookie () inak sa vyskytne chyba. A verte mi, veľa nováčikov to priznáva.

Po stiahnutí HTML tagy prichádzame do momentu, keď potrebujeme skontrolovať cookie... Prečítame si ich a potom skontrolujeme. Ak sú správne, tak používateľa pozdravíme, v opačnom prípade zobrazíme prihlasovací formulár.

To je celý scenár, ako vidíte, môžete na to prísť. Má však jednu chybu v tom, čo tlačíme.“ Nesprávne údaje"pred značkou" ". Takže domáca úloha: opravte túto chybu, aby nedošlo k porušeniu HTML platnosť... Je to veľmi jednoduché, ale bude to mimoriadne užitočné, pretože budete musieť pochopiť tento kód, a preto zistiť, ako pracovať s cookies v PHP... A použite súbor cookie v php sa stáva veľmi často a ja sa pokúsim upevniť vaše poznatky o nich v nasledujúcich článkoch.

(PHP 4, PHP 5, PHP 7)

setcookie – odošle súbor cookie

Popis

Bool súbor cookie (reťazec $ meno [, reťazec $ hodnota [, int $ expiruje = 0 [, reťazec $ cesta [, reťazec $ doména [, bool $ secure = false [, bool $ httponly = false ]]]]]])

súbor cookie () nastavuje súbor cookie, ktorý sa má odovzdať klientovi spolu s ďalšími hlavičkami HTTP. Ako každá iná hlavička, aj cookie musí byť odovzdaná predtým ako budú zobrazené akékoľvek iné údaje skriptu (toto je obmedzenie protokolu). To znamená, že v skripte musia byť volania tejto funkcie umiestnené pred zvyškom výstupu, vrátane výstupu značiek a ako aj prázdne riadky a medzery.

Po odovzdaní klientovi bude súbor cookie dostupný prostredníctvom polí $ _COOKIE a $ HTTP_COOKIE_VARS pri ďalšom načítaní stránky. Upozorňujeme, že superglobály ako $ _COOKIE sú dostupné iba v PHP 4.1.0. Hodnoty cookie sú tiež v $ _REQUEST.

Zoznam parametrov

Všetky argumenty okrem názvu sú voliteľné. Ak potrebujete preskočiť akýkoľvek argument, môžete ho nahradiť prázdnym reťazcom ( "" ). Toto neplatí pre argument o skončení platnosti. Keďže akceptuje celočíselné hodnoty, prázdny reťazec nie je vhodný na jeho nahradenie. Namiesto toho použite nulu ( 0 ).

Vypršať

Čas vypršania platnosti súboru cookie. Toto je časová pečiatka Unixu, to znamená, že je to počet sekúnd od začiatku epochy. Inými slovami, je vhodné tento čas nastaviť pomocou funkcie čas () pridaním času v sekundách, po ktorom musí cookie uplynúť. Alebo môžete použiť funkciu mktime (). čas () + 60 * 60 * 24 * 30 nastaví platnosť súboru cookie na 30 dní. Ak je nastavený na 0 alebo je vynechaný, platnosť súboru cookie vyprší na konci relácie (keď je prehliadač zatvorený).

Komentujte:

Môžete si všimnúť, že expirácia berie ako hodnotu časovú pečiatku Unixu a ukladá ju vo formáte Wdy, DD-Po-YYYY HH: MM: SS GMT... PHP vykoná internú konverziu automaticky.

cesta

Cesta k adresáru na serveri, z ktorého budú cookies dostupné. Ak sa pýtate "/" , súbor cookie bude dostupný v celej doméne domény. Ak sa pýtate "/ foo /", súbory cookie budú dostupné iba z adresára / foo / a všetky jeho podadresáre (napr. / foo / bar /) doménová doména. Štandardne je hodnotou aktuálny adresár, v ktorom je súbor cookie nainštalovaný.

Doména, pre ktorú je súbor cookie dostupný. Nastavenie domény "www.example.com" sprístupní súbor cookie na subdoméne www a subdomény vyššieho rádu. Súbory cookie dostupné na nízkej úrovni ako napr "example.com", bude k dispozícii vo všetkých subdoménach vyšších úrovní vrátane "www.example.com"... Staršie prehliadače, ktoré dodržiavajú „zastarané“ pokyny RFC 2109, môžu vyžadovať . pred doménou, aby zahŕňal všetky subdomény.

Označuje, že hodnota súboru cookie by sa mala preniesť z klienta cez zabezpečené pripojenie HTTPS. Ak je daný PRAVDA, cookie od klienta sa prenesie na server iba v prípade, že je vytvorené zabezpečené spojenie. Pri prenose súboru cookie zo servera na klienta je na programátorovi webového servera, aby zabezpečil prenos tohto typu súboru cookie cez zabezpečený kanál (poznámka $ _SERVER ["HTTPS"]).

Httponly

Ak je daný PRAVDA, súbory cookie budú dostupné iba prostredníctvom protokolu HTTP. To znamená, že súbory cookie v tomto prípade nebudú dostupné pre skriptovacie jazyky, ako je JavaScript. Táto funkcia bola navrhnutá ako opatrenie na efektívne zníženie krádeže identity prostredníctvom útokov XSS (hoci nie sú podporované všetkými prehliadačmi). Treba však poznamenať, že okolo tejto možnosti sa často vedú spory o jej účinnosti a vhodnosti. Argument bol pridaný v PHP 5.2.0. Dokáže nadobudnúť hodnoty PRAVDA alebo FALSE.

Návratové hodnoty

Ak nejaký výstup (značky, prázdne riadky, medzery, text atď.) už bol odovzdaný klientovi pred volaním funkcie, súbor cookie () odmietne a vráti sa FALSE... Ak súbor cookie () bude úspešne fungovať, potom sa vráti PRAVDA... To však neznamená, že klientska aplikácia (prehliadač) súbor cookie správne prijal a spracoval.

Príklady

Nižšie uvádzame niekoľko príkladov odosielania súborov cookie:

Príklad č. 1 Príklad použitia súbor cookie ()

$ value = "(! LANG: niekde niečo" ;!}

Setcookie ("TestCookie", hodnota $);
setcookie ("TestCookie", hodnota $, čas () + 3600); / * platí 1 hodinu * /
setcookie ("TestCookie", hodnota $, čas () + 3600, "/ ~ rasmus /", "example.com", 1);
?>

Stojí za zmienku, že hodnota súboru cookie je pred odoslaním klientovi zakódovaná do adresy URL. Pri načítaní sa súbor cookie dekóduje a umiestni do premennej s rovnakým názvom ako názov súboru cookie. Ak nechcete, aby boli hodnoty kódované, použite funkciu setrawcookie ()(funguje v PHP 5). Obsah našich testovacích súborov cookie si môžete pozrieť spustením jedného z nasledujúcich príkladov:

// Vytlačí jednu konkrétnu hodnotu súboru cookie
echo $ _COOKIE ["TestCookie"];
echo $ HTTP_COOKIE_VARS ["TestCookie"];

// Na účely testovania a ladenia môže byť užitočné zobraziť všetky súbory cookie
print_r ($ _COOKIE);
?>

Príklad č. 2 Príklad vymazania súboru cookie pomocou súbor cookie ()

Ak chcete súbor cookie odstrániť, stačí uviesť určitý čas v minulosti ako dátum vypršania platnosti. Tým sa spustí mechanizmus prehliadača na vymazanie súborov cookie, ktorých platnosť vypršala. Nižšie uvedené príklady ukazujú, ako odstrániť súbory cookie nastavené v predchádzajúcich príkladoch:

// nastavte dátum vypršania platnosti pred jednou hodinou
setcookie ("TestCookie", "", čas () - 3600);
setcookie ("TestCookie", "", čas () - 3600, "/ ~ rasmus /", "example.com", 1);
?>

Príklad #3 súbor cookie () a polia

Do súboru cookie je možné vložiť polia. Aby ste to dosiahli, každý súbor cookie musí dostať názov v súlade s pravidlami pre pomenovanie polí. Táto funkcia vám umožňuje umiestniť toľko hodnôt, koľko je prvkov v poli. Po návrate budú všetky tieto hodnoty umiestnené do poľa s názvom tohto súboru cookie:

// odoslať cookie
setcookie ("cookie", "cookietrie");
setcookie ("cookie", "cookietwo");
setcookie ("cookie", "cookieone");

// po opätovnom načítaní stránky zobrazí súbor cookie
if (isset ($ _ COOKIE ["cookie"])) (
foreach ($ _COOKIE ["cookie"] ako názov $ => hodnota $) (
$ name = htmlspecialchars ($ name);
$ hodnota = htmlšpeciálne znaky (hodnota $);
echo "$ meno: $ hodnota
\ n ";
}
}
?>

v skripte, alebo môžete nastaviť smernicu output_buffering v súbore php.ini alebo konfiguračných súboroch servera.

Komentujte:

Všeobecné poznámky:

  • Súbory cookie sa stanú viditeľnými až po opätovnom načítaní stránky, pre ktorú by mali byť viditeľné. Ak chcete skontrolovať, či boli súbory cookie nastavené správne, skontrolujte ich pri ďalšom načítaní stránky pred uplynutím platnosti. Dátum vypršania platnosti súboru cookie sa nastavuje v parametri expirácie. Je vhodné skontrolovať existenciu súboru cookie jednoduchým volaním print_r ($ _ COOKIE);.
  • Pri odstraňovaní cookie je potrebné nastaviť rovnaké parametre ako pri nastavovaní. Ak je hodnota prázdny reťazec resp FALSE a nastavte zostávajúce parametre podľa predchádzajúceho volania, ktoré nastavilo cookie, potom sa cookie s daným názvom vymaže z klientskeho počítača. Interne to vyzerá takto: cookie má priradenú hodnotu „vymazané“ a dátum vypršania platnosti je nastavený jeden rok do minulosti.
  • Od nastavenia hodnoty FALSE spôsobí vymazanie súboru cookie, nenastavujte súbor cookie na boolovskú hodnotu. Namiesto toho môžete použiť 0 pre FALSE a 1 pre PRAVDA.
  • Súbory cookie môžu byť pomenované ako polia a budú dostupné v skripte PHP ako polia, ale na počítači používateľa budú uložené ako samostatné položky. Ak chcete nastaviť súbor cookie s viacerými názvami a hodnotami, je vhodné použiť funkciu vybuchnúť ()... Na tieto účely sa neodporúča používať funkciu serializovať () pretože to negatívne ovplyvňuje bezpečnosť skriptu.

S viacerými hovormi súbor cookie () funkcie sa vykonávajú v poradí, v akom boli volané.

Odkiaľ sa pojem „cookie“ vzal, nikto nevie s istotou, hoci sa verí, že počas prvých dní unixových systémov sa niekde používalo slovné spojenie Magic Cookies. Boli to „potvrdenky“ (žetón, lístok), ktoré sa medzi programami vymieňali.

Súbor cookie je riešením jedného zo starších problémov protokolu HTTP (HyperText Transfer Protocol). Tento problém spočíva v nekonzistencii spojenia medzi klientom a serverom, ako pri FTP alebo Telnet relácii, t.j. pre každý dokument (alebo súbor) sa počas prenosu cez protokol HTTP odošle samostatná požiadavka. Čiastočné riešenie tohto problému poskytlo zahrnutie súborov cookie do protokolu HTTP. Inými slovami, transakcia je dokončená potom, čo prehliadač zadá požiadavku a server vydá príslušnú odpoveď. Ihneď potom server na používateľa „zabudne“ a každú ďalšiu požiadavku od toho istého používateľa považuje za nového používateľa.

Pomocou súborov cookie môžete emulovať reláciu cez protokol HTTP. Stručne povedané, princíp emulácie relácie je nasledovný: pri prvej požiadavke sa vydá zodpovedajúca hodnota cookie a pri každej ďalšej požiadavke sa táto hodnota načíta z premennej prostredia HTTP_COOKIE a podľa toho sa spracuje.

Jednoduchý príklad: existuje formulár, kde je používateľ požiadaný o zadanie svojho mena, je z neho vyvolaný skript, ktorý zapíše hodnotu cookie do prehliadača používateľa. Pri každej ďalšej návšteve sa na základe analýzy hodnoty súboru cookie z prehliadača používateľa zobrazí buď personalizovaný pozdrav (ak je nastavená hodnota súboru cookie), alebo úvodný formulár so žiadosťou o používateľské meno (ak hodnota súboru cookie nie je nastavená) sa zobrazí na stránke.

Poďme teda k praxi:

1. Nastavenie súboru cookie pomocou PHP

Na nastavenie tejto funkcie má php operátor:
súbor cookie (). Najlepšie na tom je, že funkcia setcookie () zaberá až šesť argumentov v závislosti od toho, ako sa chystáte manipulovať s hodnotami cookie a kto bude čítať hodnoty cookie.

Najjednoduchší spôsob nastavenia súboru cookie je:

Setcookie ("meno", "bret");

Potom pre každú nasledujúcu stránku na vašom webe, ktorá sa zobrazí počas tejto relácie (kým používateľ neopustí web), bude mať premenná $ name hodnotu „bret“ a dá sa ľahko prečítať pomocou PHP. Tento typ súboru cookie je známy ako súbor cookie relácie, pretože hodnota je uložená počas trvania relácie používateľa.

Ak chcete, aby si prehliadač zapamätal hodnotu súboru cookie potom, čo používateľ ukončí reláciu, musíte funkcii setcookie () odovzdať tretí parameter – dátum vypršania platnosti súboru cookie. Keďže PHP bolo vyvinuté primárne v prostredí Unixu, čas vypršania platnosti súboru cookie by ste si mali predstaviť ako počet sekúnd od 1. januára 1970. Ak máte skúsenosti s programovaním v Unixe, nemalo by vás to prekvapovať. Ale ak ste programovali iba na Windows alebo Macintosh, možno by ste sa čudovali, akí blázni sú títo Unixoidi.

Ale neboj sa. PHP má veľmi šikovnú funkciu, mktime (). Zadáte to ako parametre (v tomto poradí) hodinu, minútu, sekundu, mesiac, deň a rok, ktoré špecifikujú bod v čase, ktorý chcete reprezentovať v čitateľnom formáte UNIX, a mktime () vám vráti počet sekúnd od 1. januára 1970 pred určeným časom. Napríklad, ak chcete, aby platnosť súboru cookie vypršala 1. januára 2000, napíšte:

Ak chcete zmeniť hodnotu súboru cookie na novú, môžete jednoducho prepísať jeho (jej?) hodnotu. Takže aj keď prehliadač už odoslal hodnotu cookie na server na jednej z predchádzajúcich stránok, je celkom možné povedať serveru, že vaše meno je v skutočnosti „jeff“.

Všimnite si, že to nemení hodnotu premennej $ name. Inštaluje sa pri načítaní stránky. Ak chcete, aby sa hodnota premennej menila synchrónne so zmenou hodnoty súboru cookie, musíte zmeniť kód takto:

Ďalšie dva parametre funkcie setcookie () vám umožňujú nastaviť cestu a názov domény niekoho, kto môže čítať hodnotu vášho súboru cookie. V predvolenom nastavení môžu čítať jeho hodnotu iba stránky umiestnené v rovnakom adresári alebo pod štruktúrou podadresárov servera, ktorý súbor cookie nastavil. Deje sa tak z bezpečnostných dôvodov. Ak má však váš server dva názvy domén: „www.domain.com“ a „other.domain.com“ a váš účet vám umožňuje obsluhovať stránky z adresára ~ / myhome, musíte funkciu setcookie () zavolať ako nasleduje:

Posledný parameter setcookie (), ktorý sme nikdy nepoužili, vyžaduje, aby bol súbor cookie odovzdaný iba webovým serverom, ktoré používajú protokol zabezpečeného pripojenia, ako je SSL. Ak to potrebujete, nastavte šiesty parameter na 1.

Odstránenie súboru cookie je tiež veľmi jednoduché, stačí zadať názov súboru cookie do setcookie () a PHP sa postará o zvyšok:

Na záver je potrebné uviesť ešte jednu poznámku týkajúcu sa používania súborov cookie. Kvôli tomu, ako sa s HTTP cookies zaobchádza, musia byť všetky cookies nastavené pred zobrazením akéhokoľvek textu. Ak urobíte opak, PHP vám dá varovanie a žiadna hodnota cookie sa neodošle. To je správne:

A tak - nie:

2. Nastavenie súboru cookie pomocou JavaScriptu

Hodnotu súboru cookie môžete nastaviť pomocou JavaScriptu. Jedinou nevýhodou tejto metódy je, že nie všetky prehliadače ju podporujú. Nižšie sú uvedené príklady funkcií JavaScript, ktoré napísal Alexey Alexandrov pre skript „Organizer“.

Príklad. Funkcia na nastavenie hodnoty súboru cookie

// názov - názov súboru cookie // hodnota - hodnota súboru cookie // - dátum vypršania platnosti
cookie (štandardne - do konca relácie) // - cesta, pre ktorú je cookie platný
(štandardne - dokument, v ktorom bola nastavená hodnota) // - doména, pre ktorú je súbor cookie platný
(predvolene - doména, v ktorej bola hodnota nastavená) // - boolovská hodnota označujúca, či
bezpečný prenos funkcie hodnoty cookie setCookie (názov, hodnota, expiruje, cesta, doména, secure) (var curCookie = názov + "=" + escape (hodnota) + ((vyprší)? "; expiruje =" + expires.toGMTString () : "") + ((cesta)? "; cesta =" + cesta: "") + ((doména)? "; doména =" + doména: "") + ((zabezpečené)? "; zabezpečené" : " "), ak (! pozor || (názov +" = "+ escape (hodnota)). dĺžka<= 4000) document.cookie = curCookie else if (confirm("Cookie превышает 4KB и будет вырезан!")) document.cookie = curCookie }

Príklad. Funkcia čítania hodnoty cookie

Ak súbor cookie neexistuje, vráti nastavenú hodnotu alebo prázdny reťazec.

// názov je názov súboru cookie na čítanie funkcie getCookie (názov) (var prefix = názov + "=" var cookieStartIndex = document.cookie.indexOf (predpona) if (cookieStartIndex == -1) return null var cookieEndIndex = document .cookie.indexOf
(";", cookieStartIndex + predpona.dĺžka) if (cookieEndIndex == -1) cookieEndIndex = document.cookie.length return unescape (document.cookie.substring
(cookieStartIndex + prefix.length, cookieEndIndex)))

Príklad. Funkcia na odstránenie hodnoty súboru cookie

Princíp tejto funkcie spočíva v tom, že súbor cookie je nastavený so zámerne zastaraným parametrom expirácie, v tomto prípade 1. januára 1970.

// názov je názov súboru cookie // je cesta, pre ktorú je súbor cookie platný // je doména, pre ktorú je súbor cookie platný funkcia deleteCookie (názov, cesta, doména) (if (getCookie (názov)) (dokument .cookie = názov + "= "+ ((cesta)?"; cesta = "+ cesta:" ") + ((doména)?"; doména = "+ doména:" ") +"; platnosť končí = štvrtok 01 - Jan-70 00:00 : 01 GMT ")

3. Nastavenie cookie pomocou Perlu

Najvýkonnejší a najflexibilnejší spôsob správy dokumentov pomocou mechanizmu súborov cookie sú skripty CGI. Nastavenie hodnoty súboru cookie v jazyku Perl by vyzeralo takto:

Tlač "Typ obsahu: text / htmln"; print "Set-Cookie: užívateľské meno = aaa13; platnosť vyprší = piatok,
31. decembra 99 23:59:59 GMT; cesta = /; doména = www.citforum.ru; nn ";

Skript generuje hlavičku HTTP pri zobrazení výsledkov práce:

Typ obsahu: text / html Set-Cookie: "používateľské meno = aaa13; platnosť končí = piatok,
31. decembra 99 23:59:59 GMT; cesta = /; doména = www.webscript.ru; "

A teraz o smutnom...

Obmedzenia

Klient (prehliadač) má nasledujúce obmedzenia týkajúce sa súborov cookie:

  • celkovo je možné uložiť až 300 hodnôt cookie
  • každý súbor cookie nemôže presiahnuť 4 kB
  • z jedného servera alebo domény je možné uložiť až 20 hodnôt cookie

Ak sa prekročí limit 300 alebo 20, prvý záznam v čase sa vymaže. Pri prekročení limitu 4KB utrpí hodnota cookie - časť záznamu (od začiatku tohto záznamu) sa odreže rovnajúca sa prekročenému objemu.

V prípade ukladania dokumentov do vyrovnávacej pamäte, napríklad prostredníctvom proxy servera, sa pole Set-cookie hlavičky HTTP nikdy neukladá do vyrovnávacej pamäte.

Fórum portálu PHP. SU