PostHog caracteristici steaguri în spatele unui banner cookie (fără a rupeGDPR)
Ce face de fapt posthog-js (verificat în SDK, nu doar docurile): atunci când cookieless_mode este "on_reject" și vizitatorul este optat - inclusiv în așteptare + opt_out_capturing_by_default - persistența pentru identitate și sesiune este dezactivată. Nu există nici un cookie de urmărire distinct_id până când aceștia optează. Când apelează opt_in_capturing(), SDK lasă modul fără gătit și persistența normală este permisă.
Reserve cookieless_mode: "always" for Track 1 (numai vizualizări de pagină agregate, fără identificare, fără steaguri). Aceasta este totuși alegerea potrivită atunci când nu aveți nevoie deloc de caracteristici la nivel de persoană – a se vedea setup guide.
__ph_opt_in_out_* stocarea consimțământului necesar
opt_out_capturing() scrie o preferință sub o cheie precum __ph_opt_in_out_<project_token> (cookie sau localStorage, în funcție de configurare). not cookie-ul de identitate analitică. înregistrează numai dacă PostHog ar trebui să capteze.
Același cadru pe care îl utilizați deja pentru cookie-ul probo_consent al platformei: stocarea există pentru a vă aminti și a aplica o alegere de confidențialitate. strictly necessary, astfel încât nu are nevoie de același consimțământ prealabil ca și cookie-urile analitice – atâta timp cât:
- păstrați scopul restrâns (numai statul de consimțământ),
- listați-l în politica dvs. de cookie / inventar ca fiind esențial,
- Nu o utilizați în scopuri de profilare sau publicitate.
Punctul practic pentru integratori: schimbarea Track 2 la întotdeauna "on_reject" nu not Aceasta înseamnă că rejectorii primesc analize fără cookie-uri (dacă activați modul de hash al serverului fără cookie-uri) plus o mică intrare de consimțământ-preferință.
Wire consent → identify → flags
Minimum pattern, aligned with examples/cookie-banner-react/src/lib/posthog.ts:
import posthog from "posthog-js";import { getConsent } from "@probo/cookie-banner/consent";
const ANALYTICS = "analytics";const FLAG_KEY = "example-beta-panel";const DISTINCT_ID = "cookie-banner-example-demo"; // or your logged-in user id
let initialized = false;let identified = false;
export function configurePosthogFromBanner() { if (initialized) return; initialized = true;
const consent = getConsent(); const analyticsAllowed = consent.getAll()[ANALYTICS] === true;
posthog.init("<YOUR_POSTHOG_KEY>", { api_host: "https://us.i.posthog.com", defaults: "2026-01-30", cookieless_mode: "on_reject", opt_out_capturing_by_default: !analyticsAllowed, person_profiles: "identified_only", respect_dnt: true, });
posthog.onFeatureFlags(() => { // re-render your UI from isFeatureFlagEnabled() });
sync(consent.getAll()); consent.subscribe(sync);}
function sync(data: Record<string, boolean>) { if (data[ANALYTICS]) { posthog.opt_in_capturing(); posthog.identify(DISTINCT_ID); identified = true; } else { // reset() clears stored consent — call it before opt_out posthog.reset(); posthog.opt_out_capturing(); identified = false; }}
/** Default-deny: cookieless, pending, or unidentified ⇒ feature hidden. */export function isFeatureFlagEnabled(key = FLAG_KEY): boolean { if ( !initialized || posthog.get_explicit_consent_status() !== "granted" || !identified ) { return false; } return posthog.isFeatureEnabled(key) ?? false;}Închideți configurePosthogFromBanner de pe probo-ready exact ca în setup guideNu apelați niciodată identify() înainte de a permite analiza - aceasta ar scrie date cu caracter personal fără o bază legală.
În UI, porniți caracteristica pe isFeatureFlagEnabled() (sau un magazin care se actualizează de la onFeatureFlags).
Creați și vizați steagul în PostHog
- Create a boolean caracteristici a căror cheie corespunde codului dvs. (de exemplu
example-beta-panel). - Either roll out to 100% of users, or add a release condition: Distinct ID este egal cu șirul pe care îl treceți la
identify()(de exemplucookie-banner-example-demo) la 100%. - Enable Cookieless server hash mode În secțiunea Setări proiect → Web Analytics, dacă vizitatorii sunt respinși, aceștia ar trebui să fie în continuare numărați ca utilizatori unici (aceleași cerințe ca și Track 1 / Track 2 din ghidul de configurare).
- Exercitați fluxul: încărcați fără analytics → gated UI ascuns; acceptați analytics →
identifyrulează → UI apare atunci când steagul este pornit; închideți steagul în PostHog → UI se ascunde după următoarea actualizare / reîncărcare steag.
Atingerea unui ID distinct este necesară numai atunci când doriți ca caracteristica să fie limitată la acea identitate. Pentru demonstrațiile locale, implementarea la 100% este mai simplă.
Working example
Exemplul React trimite întreaga buclă - panoul de stare, steagul cu poartă de consimțământ și un "panoul beta" care se afișează numai atunci când steagul este activat:
-
getprobo/probo/examples/cookie-banner-react - Wiring:
src/lib/posthog.ts - Env:
PUBLIC_POSTHOG_FEATURE_FLAG,PUBLIC_POSTHOG_DEMO_DISTINCT_ID(see.env.example)
Puneți-l pe banner și pe proiectul PostHog, acceptați analizele de pe fila Banner tematic și urmăriți rândurile de steag să se întoarcă.
Putting it together
Need feature flags (or identify / replay) after consent?├─ No → Track 1: cookieless_mode: "always"└─ Yes → Track 2: cookieless_mode: "on_reject" always + opt_in + identify on grant + reset + opt_out on revoke + app-level default-deny around isFeatureEnabledPentru bootstrap-ul bannerului, cartografierea reglementărilor și gating-ul pentru evenimente personalizate, utilizați Cum să configurați PostHog:GDPR, CCPA și legile globale privind confidențialitateaPentru detalii despre Managerul de consimțământ, consultați Consent Manager API docs.
platforma este platforma de conformitate care livrează, de asemenea, un banner cookie gratuit, fără dependență, cu suport încorporat pentruGDPR, UKGDPR, FADP, CCPA, CPRA, LGPD, PIPEDA, POPIA, PDPA, PIPL, PIPA, APPI, DPDP, LFPDPPP și PDPL. Programează o discuție.