Cum numeri view-urile

Salut. Scriu că sa va intreb cum numărați voi viewurile generate de orice tip de utilizator ( cu sau fara cont) generate pentru un anumit topic, fie postare de blog fie imagine sau altceva

Pe scurt, Redis :slight_smile:

Eu întrebăm de logica folosită pentru asta.

eu am un img de 1px inserat cu js la finalul incarcarii paginii

te referi la cum facem asta dpdv tehnic (ex: raspunsul lui @kleampa) sau la ce consideram a fi un view (eventual unic) ?

Da tehnic. Folosiți un token sau ip ul utilizatorului, faceți logica pe back end sau pe front end. La asta mă refeream

Google Analytics sau Piwik pe frontend e probabil cea mai simpla solutie.

if(!('gensid' in window)){
  window.gensid = function() {
    let array = new Uint32Array(8);
    window.crypto.getRandomValues(array);
    let str = '';
    for (let i = 0; i < array.length; i++) {
      str += (i < 2 || i > 5 ? '' : '-') + array[i].toString(16).slice(-4);
    }
    return str;
  };
  (function(g) {
    if('localStorage' in window)
      try { g = window.localStorage; }
      catch(e) { console.error('localStorage access failed:', e); }
    if(g&&g.getItem('sid')!==null){
      let ts = Math.floor(Date.now()/1000);
      if (!g.getItem('ts')===null) {
        g.setItem('ts', Math.floor(Date.now() / 1000));
      }
      return;
    }
    if(g) {
      g.setItem('sid', gensid());
      g.setItem('ts', Math.floor(Date.now() / 1000));
    }
  })();
  window.clearsid = function(g) {
    try { g = window.localStorage; }
    catch(e) { console.error('localStorage access failed:', e); }
    if (g) {
      let ts = Math.floor(Date.now() / 1000);
      if (g.getItem('ts')!==null) {
        let ts0 = parseInt(g.getItem('ts'), 10);
        if (!isNaN(ts0) && (ts - ts0) > 20 * 60) { // 20 minutes
            g.clear();
        }
      }
    }
  };
}

codul ăsta crează un token pe care poți să-l trimiți la server.
din cînd în cînd apelezi clearsid() care resetează token-ul dacă e mai vechi de 20 de minute

nu e GDPR friendly :wink: