2011-01-27 23 views
8

Tworzę własną bibliotekę GA, aby utworzyć URL do piksela śledzącego, ponieważ muszę używać GA w środowisku bez plików cookie. Ale utknąłem przy tworzeniu skrótu domeny dla formatu cookie.Budowanie haseł domeny Google Analytics

W tej cookie:

__utma=126394024.179004532335319200.1247654493.1260769004.1260878051.7 

Pierwszy segment 126394024 jest najwyraźniej „hash domeny”, a jednocześnie wiele stron wydają się wskazywać, w jaki sposób jest on wykorzystywany, nie mogę rzeczywiście dowiedzieć się, jak wygenerować go z domeny . Czy robi to tylko wewnętrzny proces na serwerach Google, który jest nieznany reszcie świata? Czy istnieje sposób, w jaki mogę samemu uzyskać nazwę domeny, aby wygenerować ten token?

+0

Z ciekawości, w jakim języku ją budujesz? – Yahel

+0

Javascript. Przechodzi do systemu, który musi działać z pliku: // url, który niestety nie obsługuje plików cookie. Natomiast ga.js wymaga plików cookie. –

Odpowiedz

3

C# wersja powyższego, jeżeli ktoś chce go:

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

działa świetnie, dzięki – Dan

1

Oto wersja Java. Może to być przydatne dla każdego, kto potrzebuje UDF Ula. Trudne części tłumaczenia to pierwszeństwo bitowego xor operatora i technika uzyskiwania kodu Unicode. Definicja klasy została pominięta w celu zachowania zwięzłości.

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

Trochę późno, ale nie mogłem go znaleźć gdzie indziej, więc o to, co warto tutaj, to wersja PHP. Działa to dla mnie, więc miejmy nadzieję, że będzie to tabaka dla innych.

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; 
}