Práce s cookies

Cookie jsem poprvé využil v gbooku pro zapamatování údajů z formuláře co již uživatel zadal, aby je nemusel neustále vepisovat znovu (jméno, mail popřípadě web). Tady je malá rada jak na to.

Co je to vlastně cookie jsou?

Asi nejlepší vysvětlení co mě teď napadá – Cookie jsou možnost uložit si malinkatý textový soubor s textem na počítač návštěvníka – pokud má puštěné cookies (v 99% ano).
Čili bez toho, aniž bychom museli uživatele registrovat a přihlašovat se, můžeme pomocí těchto souborů usnadnit uživateli život, uložit si specifické informace, co se budou týkat jen jednoho uživatele.

Na co bych cookies použil:

  • Zapamatování údajů z formulářů
  • Zabezpečení ankety proti vícenásobnému hlasování (+ ochrana přes IP)
  • Zapamatování alternativního CSS stylu pro styleswitcher (měnič stylů)
  • Zapamatování jazykové mutace
  • atd

Jak je vidět, nejsou to žádná citlivá data jako je třeba přihlášení do administrace. Prostě to, aby jejich případné zneužití mělo zanedbatelné nebo žádné škodlivé následky.

Praktický příklad

Uložení cookies se provádí přes funkci setcookie. Tato funkce stejně jako třeba session_start musí být před jakýmkoliv výstupem ze stránky. Tedy žádné echo, žádné html.

Zapamatování údajů z formuláře. Zpracování skriptu:

<?php
/*
* (c) 2006 peCan.cz
* Fígl je v tom, že tento kód MUSÍ být uložen na úplném začátku stránky.
* Pokud je stránka includovaná do jiné (třeba index.php) musí tento kód být na začátku index.php (ještě před <html>)
* Pokud používáte kódování UTF-8, uložte všechny soubory bez identifikačních bitů
*/
if(isset($_POST['sent_formular_gbook'])){
  $nick= htmlspecialchars($_POST['nick']);
  $web = htmlspecialchars($_POST['web']);
  $mail= htmlspecialchars($_POST['mail']);

  // Spojíme jednotlivé proměnné do jednoho řetězce
  // Jednitlivé proměnné oddělíme znakem # (hash)
  $HodnotaCookie=$nick . "#" . $web . "#" . $mail;
  // Určíme platnost cookie, aktuální čas + počet sekund
  $CookiePlatiDo=time()+31536000;
    @setcookie("FormData", $HodnotaCookie, $CookiePlatiDo);
    // Použijeme fci setcookie pro uložení hodnot. (Jméno, Hodnota, PlatnostDo)
    // @ před funkcí je tzv. operátor ticha. Potlačí hlášku pokud se funkce neprovede.
    // @ rozhodně nepoužívejte při testování.
}

// pokračujete dál ve zpracování skriptu...
?>

Při zobrazení formuláře pak:

<?php
if(isset($_COOKIE['FormData'])){
  // Pokud COOKIE FormData existuje, přečteme její hodnotu.

  $hodnota=explode("#", $_COOKIE['FormData']);
  // Pomocí fce explode uložený řetězec rozložíme do pole

  // Nick byl uložen jako první. Pole se čísluje od 0
  $exNick=$hodnota[0];
  $exWeb =$hodnota[1];
  $exMail=$hodnota[2];
}
?>

<form action="gbook_zpracuj.php" method="post" name="formular">
  <input type="hidden" name="backlink" value="<?php echo $_SERVER['REQUEST_URI']; ?>" />
    <input type="hidden" name="sent_formular_gbook" value="" />
    <input type="text" name="nick" size="30" value="<?php if(isset($exNick)) {echo $exNick; } ?>" />
    <input type="text" name="web"  size="30" value="<?php if(isset($exWeb))  {echo $exWeb; }  ?>" />
    <input type="text" name="mail" size="30" value="<?php if(isset($exMail)) {echo $exMail; } ?>" />
    <textarea name="textstary" cols="40" rows="7"></textarea>
  <input type="submit" name="send" value="Přidej" accesskey="s" title="klávesová zkratka: alt+s"  />
</form>

Tak to by bylo.


<Starší | tento článek | Novější>

Napsáno: 3. 9. 2006, 15:25 | Přečteno: 14174x | Kategorie: PHP School | Napsal: peCan.cz |
Čo je maximálna obezita? Keď si ľahneš na pláž a Greenpeace Ťa začne ťahať do mora.
Petr Graubner | ICQ- 264912843, Jabber - pecan27@njs.netlab.cz | RSS | Šlape na miniRS | Styl CoolStyle | Zpracováno za: 0.164s | Počet SQL dotazů ve fóru: 1 | Admin