webmaster webmastering webdesign

Jesteś tutaj: webmade.org >> kursy online >> kurs php >> Część 7

Cookies

autor: Leszek 'leon' Krupiński, ostatnia modyfikacja: 2007-10-12

szukaj: cookies cookies ciasteczka ciasteczka kurs php kurs php

Metodą nie tyle przekazywania parametrów, co przechowywania niewielkich ilości danych na komputerze oglądającego stronę (np. informacje o imieniu i nazwisku lub nazwie użytkownika w tym serwisie) jest mechanizm cookies (ciasteczka). Ciasteczka ustawione przez dany serwis dostępne są tylko dla niego i ustawiane są na jakiś czas.

Ciasteczka przekazywane są za pomocą nagłówków HTTP. Muszą być one wysłane zanim do przeglądarki zostanie wysłana jakakolwiek inna treść. W związku z tym przed zapisaniem ciasteczka nie może być żadnego wywołania funkcji echo i pochodnych, a także tag otwierający tryb PHP musi być pierwszymi znakiami w pliku - nie może być żadnej spacji ani pustych wierszy. Ograniczenie to można obejść używając buforowania wyjścia - po szczegóły odsyłam do podręcznika PHP.

PHP automatycznie odczytuje ciasteczka i zamienia je na zmienne. Są one przechowywane w superglobalnej tablicy asocjacyjnej $_COOKIE (dawniej $HTTP_COOKIE_VARS), w której kluczami są nazwy ciasteczek. Ciasteczka ustawia się je pomocą funkcji setcookie( nazwa, wartość, czas_wygaśnięcia, ścieżka, domena, bezpieczeństwo). Tylko pierwszy parametr jest niezbędny. Oznacza on nazwę cookiesa - taką nazwą będzie miała zmienna stworzona przez PHP po ponownym odczytaniu ciastek. Funkcja parametru "wartość" jest chyba oczywista - taka wartość będzie przechowana w ciasteczku o podanej nazwie. Parametr czas_wygaśnięcia oznacza czas, po jakim ciastko zostanie skasowane. Czas ten należy podać jako ilość sekund od 1.1.1970 - tak jest przechowywany czas w systemach UNIX'owych. Aktualny czas w tym formacie zwracany jest przez funkcję time(). Jeśli cookie ma być trzymany przez godzinę, to do czasu zwróconego przez time() należy dodać ilość sekund zawartych w godzinie - "time() + 3600". Podobnie należy postępować w przypadku innych przedziałów czasu:

Jeśli czas będzie wcześniejszy niż aktualny czas, ciasteczko zostanie skasowane. Jeśli będzie równy zero - ciasteczko będzie ważne tylko do zamknięcia przeglądarki.

Dwa następne parametry używane są do wskazania adresu, dla którego dostępne będą cookiesy. Jeśli ostatni parametr jest ustawiony na 1, to cookie będzie przesłany za pomocą szyfrowanego połączenia HTTPS.

Standardowo nie ma możliwości przechowywania tablic w ciasteczkach, lecz można to zrobić "na około". Przed zapisaniem tablicy w ciasteczku należy użyć funkcji serialize(). Zamienia ona tablicę na ciąg znaków. Do ponownego odczytania takiej tablicy służy funkcja unserialize().

<?php
// zapis
$tablica = Array('a' => 'pierwszy', 'b' => 'drugi');
setcookie('tablica', serialize($tablica), time()+3600);

// odczyt zabezpieczony przed nieistniejącym ciasteczkiem
if (isset($_COOKIE['tablica'])) {
  $tablica = unserialize($_COOKIE['tablica']);
} else {
        $tablica = Array();
       }

?>

W PHP nowszych od 4.1.0 istnieje jeszcze superglobalna tablica $_REQUEST, która łączy w sobie tablice $_GET, $_POST, $_COOKIE i $_FILES.

Leszek 'leon' Krupiński

Zagadnienia poruszane w tej części kursu:

Chcesz zostać programistą?

Poznaj 6 kroków do efektywnej
nauki programowania!

 

valid XHTML
valid CSS
© 2004-2008 copyright by webmade.org