Symfony - pliki cookie i zarządzanie sesjami
Komponent Symfony HttpFoundation zapewnia zarządzanie plikami cookie i sesjami w sposób obiektowy. Cookiezapewnia przechowywanie danych po stronie klienta i obsługuje tylko niewielką ilość danych. Zwykle jest to 2 KB na domenę i zależy to od przeglądarki.Sessionzapewnia przechowywanie danych po stronie serwera i obsługuje duże ilości danych. Zobaczmy, jak utworzyć plik cookie i sesję w aplikacji internetowej Symfony.
Ciastko
Symfony udostępnia klasę Cookie do tworzenia pozycji cookie. Stwórzmy kolor cookie, który wygasa po 24 godzinach z wartościąblue. Parametr konstruktora klasy cookie jest następujący.
- name (type: string) - nazwa ciasteczka
- value (type: string) - wartość ciasteczka
- expire (type: integer / string / datetime) - informacja o wygaśnięciu
- path (type: string) - ścieżka serwera, na którym dostępny jest plik cookie
- domain (type: string) - adres domeny, w której plik cookie jest dostępny
- secure (type: boolean) - czy plik cookie ma być przesyłany w połączeniu HTTPS
- httpOnly (typ: boolean) - czy plik cookie jest dostępny tylko w protokole HTTP
use Symfony\Component\HttpFoundation\Cookie;
$cookie = new Cookie('color', 'green', strtotime('tomorrow'), '/',
'somedomain.com', true, true);
Symfony udostępnia również następującą opcję tworzenia ciasteczek w oparciu o ciągi znaków.
$cookie = Cookie::fromString('color = green; expires = Web, 4-May-2017 18:00:00 +0100;
path=/; domain = somedomain.com; secure; httponly');
Teraz utworzony plik cookie należy dołączyć do nagłówka obiektu odpowiedzi http w następujący sposób.
$response->headers->setCookie($cookie);
Aby uzyskać plik cookie, możemy użyć obiektu Request w następujący sposób.
$cookie = $request->cookie->get('color');
Tutaj, request->cookie jest typu PropertyBag i możemy nim manipulować za pomocą metod PropertyBag.
Sesja
Symfony dostarcza klasę Session implementującą interfejs SessionInterface. Oto ważne API sesji:
start - Rozpoczyna sesję.
Session $session = new Session();
$session->start();
invalidate - Czyści wszystkie dane sesji i ponownie generuje identyfikator sesji.
set - Przechowuje dane w sesji za pomocą klucza.
$session->set('key', 'value');
Możemy użyć dowolnych danych w wartości sesji, być prostą liczbą całkowitą do złożonych obiektów.
get - Pobiera dane z sesji za pomocą klucza.
$val = $session->get('key');
remove - Usuwa klucz z sesji.
clear - Usuwa dane sesji.
FlashBag
Session udostępnia inną przydatną funkcję o nazwie FlashBag. Jest to specjalny kontener wewnątrz sesji przechowujący dane tylko podczas przekierowania strony. Jest to przydatne w przekierowaniach http. Przed przekierowaniem na stronę dane można zapisać we FlashBag zamiast w zwykłym kontenerze sesji, a zapisane dane będą dostępne w następnym żądaniu (przekierowanej stronie). Następnie dane zostaną automatycznie unieważnione.
$session->getFlashBag()->add('key', 'value');
$session->getFlashBag()->get('key');