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');