2011-01-27 2 views
8

Я создаю свою собственную библиотеку GA для создания URL-адреса пикселя отслеживания, так как мне нужно использовать GA в среде без файлов cookie. Но я застрял на создании хэша домена для формата cookie.Создание хэша домена google analytics

В этом печенье:

__utma=126394024.179004532335319200.1247654493.1260769004.1260878051.7 

Первый сегмент 126394024-видимому, является «домен хэш», и в то время как многие сайты, кажется, показывают, как он используется, я не могу на самом деле понять, как создать его из домена , Это делается только внутренним процессом на серверах Google, который неизвестен остальному миру? Или есть способ, которым я могу присвоить доменное имя себе, чтобы создать этот токен?

+0

Из любопытства, на каком языке вы его строите? – Yahel

+0

Javascript. Он входит в систему, которая должна работать из файла: // url, который, к сожалению, не поддерживает файлы cookie. И ga.js требует куки. –

ответ

11

Это работает?
http://www.google.com/support/forum/p/Google+Analytics/thread?tid=626b0e277aaedc3c&hl=en

function hash(d){ 
var a=1,c=0,h,o; 
if(d){ 
a=0; 
for(h=d["length"]-1;h>=0;h--){ 
o=d.charCodeAt(h); 
a=(a<<6&268435455)+o+(o<<14); 
c=a&266338304; 
a=c!=0?a^c>>21:a 
} 
} 
return a 
} 

Не проверить это сам

+0

Это работает для меня. +1 – Yahel

+0

Awesome, отлично подходит для теста ga.js. Спасибо! –

3

C# версии выше, если кто-то хочет его:

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

отлично работает, спасибо – Dan

1

Вот версия Java. Это может быть полезно любому, кто нуждается в UUF Hive. Трудные части перевода - это приоритет оператора побитового xor и метод получения в Unicode. Определение класса было опущено в интересах краткости.

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

Бит поздно, но я не мог найти его в другом месте, поэтому для него стоит PHP-версия. Это работает для меня, так что, надеюсь, это для нюхателей для других.

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