Prosty przykład użycia (ciastek) cookie w Laravel 9

Chciałem wam przedstawić prosty przykład użycia cookie w Laravel 9 tak zwanych ciastek na podstawie wyskakującego boksu z informacją np. polityki prywatności. Wykonałem ten prosty przykład wykorzystując takie techniki programowania jak bootstrap 4, javascript, css, jquery, no i oczywiście Laravel 9.

Skrypt banalnie prosty ustawia ciasteczka, czyli cookie i sprawdza zawartość czy taka istnieje jeżeli nie to pokazuje box z informacją, co ważne jak sami zobaczycie zanim przejdzie do widoku, ażeby wyświetlić ową informację najpierw w samym middleware sprawdza, czy oby należy ją wyświetlić. Jest to o tyle ważne, że nie obciążamy już samego widoku tym sprawdzeniem i pomijamy sam fakt renderowania go zaoszczędza to jakiś tam czas i nie obciąża strony w której już jest przypisane ciastko.

Tworzymy CoockieMiddleware

Zaczniemy od stworzenia naszego Middleware gdzie podepniemy część kodu odpowiedzialnego za częściowe wykonanie programu i w niektórych przypadkach za same renderowanie boxu z informacją np. Polityki prywatności. Otwieramy konsole w miejscu gdzie znajduje się nasz Laravel i podajemy komendę do stworzenia Middleware.

Middleware Konsola
Middleware Konsola

Następnie otwieramy nasz plik i wpisujemy kod w metode handle. W samej metodzie pobieramy widok przez funkcje ->getContent() do zmiennej gdzie wykorzystamy go w dalszej części programu. Kolejną sprawą jaką musimy zrobić to stworzyć tablicę do przechowywania zmiennych które przekażemy już do samego widoku nazwiemy ją $cookis =[]; W pierwszym indeksie przypiszemy wartość niezidentyfikowaną będziemy się nią posługiwać jeżeli nie będzie cookie, wtedy program będzie wiedział że nie ma ciastka i trzeba będzie je zrobić po naciśnięciu buttona przez użytkownika. Następnie sprawdzamy czy dane ciastko jest utworzone funkcją Laravela „Cookie::has” w moim przypadku nazwałem je „CiastkoPL” i jeżeli jest odszyfrowujemy go metodą Laravela „Crypt:: encryptString”  ponieważ nasze Cookie zapisujemy właśnie w stringu. Proces opisuję jakby w odwrotnej kolejności niż to faktycznie ma miejsce w rzeczywistości. Mam nadzieję, że rozumiesz o czym piszę, jak zobaczysz kod to wszystko będzie jasne. Dobrze jeżeli już mamy cookie rozszyfrowane to czas żeby je zaszyfrować, nasuwa się pytanie po co? Ano po to żeby nikt nie oglądał parametrów które przekazujemy w ciastkach. Proste co nie?

Middleware encryptString
Middleware encryptString

Szyfrowanie odbywa się poprzez już wcześniej wspomnianą klasę statyczną „Crypt::encryptString” z tą różnicą, że jest to metoda encryptString(). No i teraz tu jest ciekawe rozwiązanie tak mi się wydaje choć niby nic nie znaczące ale czy na pewno?

Zwykłe sprawdzenie if(){} prawda czy fałsz o ile może. A więc może tyle co niejeden kucharz i odchudza program z niepotrzebnej akcji renderowania widoku boxu z informacji polityki prywatności. Działa to tak, że jeżeli cookie jest już przypisane do strony to pomija fakt dodawania go i  zwraca stary widok zaoszczędza to w ten sposób odczytywanie przez przeglądarkę niepotrzebnego kodu i tyle i aż tyle.

Middleware If
Middleware If

Jeżeli ciastka nie ma przypisanego do witryny to następuje renderowanie go, plus dodanie parametrów, czyli naszej wcześniej przygotowanej tablicy poprzez ->with i compact i dopisanie go do już odczytanego widoku, który był umieszczony w zmiennej. Całość trafia do ->setContent() i następuje return zmykający handle.

Middleware return
Middleware return

Sam widok zaczyna się od styli css nie będę opisywał poszczególnych ich elementów opiszę tylko te bardziej istotne czyli „z-index: 9999” który ustawia nasz box w pozycji najbliżej twoich oczu i pozostawia inne rzeczy za nim powodując ich niewidoczność no chyba, że ustawimy tak jak w tym przypadku   opacity: 0.9 której zadaniem jest tworzyć przeźroczystość elementu podpiętego, czyli w naszym przypadku jest to box polityki prywatności. Czym większa wartość w tym parametrze tym mniej przeźroczysty staje się box. Kolejną ważną cech naszego boxu jest jego umiejscowienie. Ja chciałem aby box znajdował się u samej góry i podążał razem za scrollem, czyli żeby utrzymywał swoją pozycję nie ważne czy scroll będzie w pozycji na dole, czy  u góry, ma zostać w niezmienionej pozycji i do tego użyłem position: fixed.

Middleware css
Middleware css

Możecie popróbować innych pozycji jak wam takie nie odpowiada. Kolejną sprawą jest już sam kod html gdzie posłużyłem się bootstrapem w wersji 4.6 i stworzyłem box z selektora card ładnie się to wkomponowało w tło strony, uważam takie rozwiązanie za ciekawe. Teraz przejdźmy do kodu <script> tu użyłem dwóch technik programowania samego JavaScript jak także jQuery połączenie tych dwóch technik dało bazowy efekt końcowy o który mi chodziło.

Opiszę go po części.

Przypisałem na sam początek dwie stałe pobierające dane z samego PHP przesłane wraz z parametrami tablicy z Middleware jest to „name” i wartość „udefined” czy wyświetlić box. Jest to oczywiście nie potrzebne i nie ma sensu ażeby tu w ogóle istniało, zostawiłem to tylko po to abyś zobaczył o co mi chodziło z tym ifem w samym middleware, gdzie pomijamy sam widok boxu ponieważ można zrobić to w ten sposób i renderować widok boxu i dopiero tu sprawdzać, czy dane sa właściwe, tylko po co? Niekiedy podczas pisania dochodzi do takich sytuacji. Bez tego ifa pozostaje sam button zamykający box i ustawiający cookie poprzez „click” jQuery i wywołujący funkcję ustawiającą cookie.

Middleware jawaScript
Middleware jawaScript

Chciałem wam jeszcze opisać samą funkcje javaScript gdzie jak sądzę dużo się dzieje. Pierwsze w parametrze cookie ustawiamy „name” następnie wartość „value”, następnie „max-age=” która przybiera ważność naszego ciasteczka wyrażane jest w sekundach, następnie „path” gdzie pozostawiamy go w naturalnej postaci przybierze on formę domyślną więc nie musimy się o nic martwić. Ustawimy sobie jeszcze dla efektu wizualnego „samesite” na Lax ale także może zostać w domyślnej postaci i w ogóle nie musimy się nim przejmować. Pozostała jeszcze domena, której także nie przypisujemy nie ma takiej potrzeby przyjmie ona formę domyślną, jeżeli komuś zależy na domenie to można ją pobrać z config session no może się kiedyś przyda choć z drugiej strony dla ciasteczka?

Middleware function
Middleware function

Middleware EncryptCookies except laravel

Kolejną dość istotną sprawą z związku z działaniem programu jest ustawienie w Middleware i klasie EncryptCookies nazwy naszego ciaska, które można odczytywać za pomocą parametrów i funkcji z Laravela. Wykonuje się to w taki sposób że do tablicy except przypisujemy nazę którą chcemy odczytywać, w innym przypadku będzie to niemożliwe i wartości value nie da się odczytać klasami, metodami, funkcjami zamiesczonymi w Laravel. Jest na to sposób ale czy o to chodzi przy korzystaniu z Laravel?

Middleware Encrypt
Middleware Encrypt

Przedstawię jak można je odczytywać jest to bardzo proste wystarczy użyć zmiennej globalnej PHP „$_COOKIE[„CiastkoPl”]” i już.

Karnel App Laravel

I na samo zakończenie pracy jest przypisanie klasy „CoockieMiddleware” do „Karnela” w App i zmiennej „$middleware” umożliwi nam to wyświetlanie boxsu w całej witrynie nie zależnie od wciśniętego linku.

MiddlewareKarnel
MiddlewareKarnel

Chciałem wam jeszcze zaprezentować coś takiego na wzór 18+ które cookie będzie przypisane tylko do danego routera i odnosiło się do jednej strony lub kilku, lecz jest to temat na osobnego posta i będzie bardzo podobny do tego.

Polityka Prywatności
Polityka Prywatności

kod do pobrania githab

W tym artykule przeczytasz:

Laravel Middleware

Javascript Cookie

jQuery

Add a Comment