Przejdź do głównej zawartości

GDPR i storage

Częstotliwość popupów wymaga przechowywania gdzieś stanu “już widziałem ten popup” na maszynie odwiedzającego. To potencjalnie regulowane przez ePrivacy / GDPR/RODO zależnie od jurysdykcji i tego jak agresywny chce być sklep. Plugin oferuje trzy tryby i fallback do sesji PHP, żeby dopasować się do twojej polityki prawnej.

Tryb wybiera się w Settings → Plugins → P2Lab Stage → Popup → Dismiss persistence (GDPR), per kanał sprzedaży.

Plugin nie dotyka sessionStorage / localStorage / cookies do momentu zaakceptowania cookies przez odwiedzającego przez twojego consent managera. Do czasu zgody suppression żyje w sesji PHP (server-side).

Efekt dla odwiedzających, którzy nie wyrażają zgody:

  • Frequency = Session — działa w pełni, suppression żyje w sesji PHP.
  • Frequency = Every N days — degraduje się do session-only suppression (sesja PHP wygasa gdy przeglądarka się zamyka, brak localStorage do pamiętania N dni).
  • Frequency = Permanent — degraduje się do session-only suppression z tego samego powodu.

Efekt dla odwiedzających, którzy wyrażają zgodę:

  • Stan suppression jest migrowany z sesji PHP do localStorage / sessionStorage.
  • Wszystkie tryby częstotliwości działają zgodnie z dokumentacją.

Plugin nasłuchuje zmian zgody na zdarzeniach cookieAcceptedAndCacheable (standardowe zdarzenie cookie-consent Shopware), więc zaakceptowanie cookies w trakcie wizyty zaczyna działać natychmiast.

Plugin zapisuje do sessionStorage i localStorage natychmiast, bez bramki zgody.

Kiedy wybrać: jeśli twoja polityka prawna traktuje te magazyny jako wyłączone — typowo gdy suppression częstotliwości jest uznawane za cel “strictly necessary” / “functional”, np. zapobieganie temu, że ten sam modal denerwuje odwiedzającego na każdej stronie. Potwierdź ze swoim zespołem prawnym.

Efekt: wszystkie tryby częstotliwości działają zgodnie z dokumentacją dla każdego odwiedzającego.

Tak samo jak tryb storage, ale używa faktycznych cookies HTTP jako backing store. Niektóre frameworki prawne traktują cookies inaczej niż localStorage; niektóre blokują strictly first-party functional cookies, inne nie.

Kiedy wybrać: w sklepach, gdzie polityka prawna explicite wycina cookies pod ten cel, albo w środowiskach, gdzie localStorage jest niewiarygodny (legacy browsery, embedded konteksty).

Przy zapisie client-side:

  • sessionStorage — prefix p2lab-stage-. Plain flaga <popupId> → dismissed.
  • localStorage — prefix p2lab-stage-. Zawiera timestamp expiry dla częstotliwości days, bez expiry dla permanent.
  • Licznik sesjip2lab-stage:shown-count śledzi distinct-popup count per sesja dla queue display mode cap.

Przy zapisie server-side (sesja PHP): tablica pod custom kluczem sesji.

Sesja PHP to zawsze-on backing store. Plugin używa jej bezwarunkowo do:

  • Trackowania, które popupy zostały server-dismissed podczas tej sesji.
  • Rejestrowania odrzucenia, gdy client storage jest zablokowany (brak zgody) albo niedostępny (private browsing wyłączające localStorage).

Fallback oznacza, że odwiedzający, którzy odrzucają cookies, nadal nie widzą tego samego popupu pięć razy w jednej sesji — serwerowa sesja zapewnia, że częstotliwość sesyjna działa niezależnie od trybu GDPR.

Trade-off: stan server-side ginie, gdy sesja PHP wygasa (typowo gdy przeglądarka się zamyka), więc częstotliwości dłuższe niż sesja (days, permanent) degradują się dla odwiedzających, którzy nigdy nie wyrażają zgody.

Gdy gdprMode = consent i odwiedzający akceptuje cookies po odrzuceniu popupu:

  1. Klient łapie zdarzenie cookieAcceptedAndCacheable.
  2. Wywołuje GET /p2lab-stage/dismissed, żeby pobrać każde ID popupu obecnie zsuppresowane w sesji PHP.
  3. Migruje je do sessionStorage / localStorage (z semantyką expiry oryginalnego typu częstotliwości).

Po tej migracji sesja PHP nie musi już nosić suppression — zostaje jako redundantny backup, ale client storage jest teraz autorytatywny.

Stan odrzucenia to jedyne trwałe przechowywanie, którego pluginowi należy:

  • Jeden wpis per popup, który odwiedzający odrzucił, z typem częstotliwości + (opcjonalnie) expiry.
  • Licznik distinct-popup-shown dla limitu per-sesja.

Plugin nie przechowuje tożsamości odwiedzającego, danych osobowych ani zachowania poza tymi odrzuceniami. Eventy statystyk (impression / CTA-click / close / permanent_dismiss) są rejestrowane server-side w p2lab_stage_event i mogą zawierać customer ID jeśli odwiedzający był zalogowany — zobacz Analityka → Eventy.

Częste użycie to sam cookie banner: popup z częstotliwością Always show (żeby pokazywał się do potwierdzenia) + button z Click action = Don’t show again, który rejestruje event permanent_dismiss i zapisuje flagę permanent.

Dla tego patternu wybierz GDPR mode = Use browser storage albo Use cookies, żeby odrzucenie utrzymywało się poza sesją — inaczej odwiedzający widzi banner za każdym razem gdy otworzy przeglądarkę, co psuje jego cel.