2011-01-27 13 views
8

Sto creando la mia libreria GA per creare da sola un URL per il pixel di tracciamento poiché ho bisogno di utilizzare GA in un ambiente senza cookie. Ma sono bloccato a creare l'hash del dominio per il formato dei cookie.Creazione di un hash del dominio google analytics

In questo cookie:

__utma=126394024.179004532335319200.1247654493.1260769004.1260878051.7 

Il primo segmento 126394024 è apparentemente un "hash dominio", e mentre molti siti sembrano mostrare come viene usato, non posso davvero capire come generare da un dominio . Questo è fatto solo da un processo interno su google server che è sconosciuto al resto del mondo? O c'è un modo per cancellare il nome di dominio per produrre questo token?

+0

Per curiosità, in che lingua stai costruendo? – Yahel

+0

Javascript. Sta entrando in un sistema che deve funzionare da un file: // url, che purtroppo non supporta i cookie. E ga.js richiede i cookie. –

risposta

3

versione C# di quanto sopra, se qualcuno lo vuole:

string hash(string d) 
    { 
     int a = 1; 
     int c = 0; 
     int h; 
     int o; 
     if (!String.IsNullOrEmpty(d)) 
     { 
      a = 0; 
      for (h = d.Length - 1; h >= 0; h--) 
      { 
       o = d[h]; 
       a = (a << 6 & 268435455) + o + (o << 14); 
       c = a & 266338304; 
       a = c != 0 ? a^c >> 21 : a; 
      } 
     } 
     return a.ToString(); 
    } 
+0

funziona alla grande, grazie – Dan

1

Ecco una versione di Java. Questo potrebbe essere utile a chiunque necessiti di un UDF Uled. Le parti difficili della traduzione sono la precedenza dell'operatore di bit xor bit e la tecnica di ottenere su Unicode. La definizione della classe è stata lasciata fuori nell'interesse della brevità.

import java.util.List; 
import java.util.ArrayList; 

static int domain_hash(String s) { 
    List<Integer> d = get_string_charCodes(s); 
    int a=0,c=0,h,o; 
    if (d.size() == 0) { 
     return(1); 
    } 
    for(h = d.size()-1; h >= 0; h--) { 
     o = d.get(h); 
     a = ((a << 6) & 268435455) + o + (o << 14); 
     c = a & 266338304; 
     if (c != 0) { 
      a = a^(c>>21); 
     } 
    } 
    return(a); 
} 

static List<Integer> get_string_charCodes(String s) { 
    List<Integer> l = new ArrayList<Integer>(); 
    int length = s.length(), codepoint, offset; 
    for(offset = 0; offset < length; offset += Character.charCount(codepoint)) { 
     codepoint = s.codePointAt(offset); 
     l.add(codepoint); 
    } 
    return(l); 
} 
0

Bit in ritardo, ma non ho potuto trovarlo altrove, quindi per quello che vale qui è una versione PHP. Funziona per me, quindi spero che faccia lo snuff per gli altri.

function hash($d){ 
    $a = 1; 
    $c = 0;  
    if ($d){ 
     $a = 0; 
     for ($h = strlen($d)-1; $h >= 0; $h--){ 
      $o = ord($d[$h]); 
      $a = (($a<<6)&268435455)+$o+($o<<14); 
      $c = $a&266338304; 
      $a = ($c != 0)? $a^($c>>21) : $a; 
     } 
    } 
    return $a; 
}