/** * Denna kod ska köras på varje sida, tidigt i laddningsprocessen, * för att etablera en konsekvent session_id och hämta client_id (från _ga cookie). * * Detta säkerställer att Server Side (Measurement Protocol) träffar * kan matchas mot webbläsarens session. */ // Global variabel för datalagret window.dataLayer = window.dataLayer || []; const SESSION_TIMEOUT_MINUTES = 30; // Standard GA4 session timeout // --- COOKIE HANTERING --- /** * Hämtar värdet från en specifik cookie. * @param {string} name - Namnet på cookien. * @returns {string|null} - Värdet av cookien. */ function getCookie(name) { const nameEQ = name + "="; const ca = document.cookie.split(';'); for(let i = 0; i < ca.length; i++) { let c = ca[i]; while (c.charAt(0) === ' ') c = c.substring(1, c.length); if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length); } return null; } /** * Sätter en cookie med angiven timeout. * @param {string} name - Namnet på cookien. * @param {string} value - Värdet. * @param {number} minutes - Livslängd i minuter. */ function setCookie(name, value, minutes) { let expires = ""; if (minutes) { const date = new Date(); date.setTime(date.getTime() + (minutes * 60 * 1000)); expires = "; expires=" + date.toUTCString(); } // Sätter SameSite=Lax för modern kompatibilitet document.cookie = name + "=" + (value || "") + expires + "; path=/; SameSite=Lax"; } // --- ID GENERERING OCH HÄMTNING --- /** * Försöker hämta Google Analytics Client ID från _ga cookie. * Formatet är vanligtvis GAx.y.CLIENT_ID.SESSION_ID * @returns {string|null} - Den unika klient-ID delen. */ function getGaClientId() { // Regex matchar GAx.y.CLIENT_ID.SESSION_ID och fångar CLIENT_ID-delen const match = document.cookie.match(/_ga=GA\d\.\d\.(\d+\.\d+)/); return match ? match[1] : null; } /** * Hämtar session ID från cookie, eller skapar ett nytt om det inte finns/har gått ut. * Session ID måste vara UNIX timestamp (sekunder) ELLER en sträng som börjar med timestamp i sekunder. * För att följa MP-specifikationen skapar vi en 10-siffrig timestamp. * @returns {string} - Session ID. */ function getSessionId() { let sessionId = getCookie('mp_session_id'); // Om sessionen saknas eller är gammal, skapa ny if (!sessionId) { // Använd UNIX timestamp i sekunder för att följa GA4's rekommendation (max 10 siffror) const nowInSeconds = Math.floor(Date.now() / 1000); // Genererar en unik sträng (t.ex. 1667232000.12345) sessionId = `${nowInSeconds}.${Math.floor(Math.random() * 100000)}`; } // Sätt eller uppdatera cookien för att förlänga sessionen setCookie('mp_session_id', sessionId, SESSION_TIMEOUT_MINUTES); // GA4 Measurement Protocol (MP) kräver att session_id:n till din server // är 10 tecken (sekunder). Vi skickar därför bara timestamp-delen. return sessionId.substring(0, sessionId.indexOf('.')); } // --- INITIERING --- const currentClientId = getGaClientId(); const currentSessionId = getSessionId(); // Pusha klient-ID och session-ID till Data Layer. // Detta kommer att slås samman med alla efterföljande event som har 'event: ...' // och kan användas av er server-side behållare för att skicka MP-träffar. if (currentClientId && currentSessionId) { window.dataLayer.push({ // Läggs på Root (globalt) i datalagret för enkel åtkomst mp_client_id: currentClientId, mp_session_id: currentSessionId }); } else { // För felsökning console.warn("Kunde inte hämta GA Client ID eller Session ID."); }