2011-11-24 9 views
13

W moim pliku danych opublikowanym dla Feedburner mam rosyjskie znaki w nazwie kampanii w ustawieniach śledzenia Feed: ${feedUri} ${feedName}. Problem polega na tym, że jest to nieprawidłowy plik cookie __utmz ustawiany przez Google Analytics i nie może być przetwarzany przez mój backend (który jest web.py). wystąpiłGoogle analytics nielegalne pliki cookie przerywa tworzenie Pythona

File "/home/dw0rm/lib/ve/lib/python2.7/site-packages/web/session.py", line 96, in _load 
    self.session_id = web.cookies().get(cookie_name) 
    File "/home/dw0rm/lib/ve/lib/python2.7/site-packages/web/webapi.py", line 359, in cookies 
    cookie.load(ctx.env.get('HTTP_COOKIE', '')) 
    File "/usr/local/lib/python2.7/Cookie.py", line 627, in load 
    self.__ParseString(rawdata) 
    File "/usr/local/lib/python2.7/Cookie.py", line 660, in __ParseString 
    self.__set(K, rval, cval) 
    File "/usr/local/lib/python2.7/Cookie.py", line 580, in __set 
    M.set(key, real_value, coded_value) 
    File "/usr/local/lib/python2.7/Cookie.py", line 455, in set 
    raise CookieError("Illegal key value: %s" % key) 
CookieError: Illegal key value:)|utmcmd 

Ten błąd w Firefoksie, i udało mi się go naprawić z tym kodem:

def myinternalerror(): 
    try: 
     web.cookies() 
    except CookieError: 
     if not "cookie_err" in web.input(): 
      web.setcookie("__utmz", None, domain=web.ctx.host) 
      raise web.seeother(web.changequery(cookie_err=1)) 
    return web.internalerror(render.site.e500()) 
app.internalerror = myinternalerror 

Ale dziś mam ten "cookie_err = 1" przekierować nawet w Chrome. Próbowałem tego w innych witrynach opartych na web.py i Analytics, a wszystkie one powodują wewnętrzny błąd serwera. I ten błąd utrzymuje się do momentu usunięcia nielegalnego pliku cookie, co jest trudne do zrobienia przez zwykłego użytkownika.

Chcę wiedzieć, jakie inne opcje powinienem rozważyć. Może moduł Python Cookie jest niepoprawny lub jest błędem przeglądarki, który dopuszcza nieprawidłowe pliki cookie. Te rzeczy mogą być wykorzystywane do złośliwych celów, ponieważ istnieje wiele stron Pythona, które korzystają z Google Analytics i modułu Cookie.

to zapytanie śledzenia: utm_source=feedburner&utm_medium=twitter&utm_campaign=Feed%3A+cafenovru+%28%D0%9E%D0%BF%D0%B8%D1%81%D1%8C+%D1%82%D1%80%D0%B0%D0%BF%D0%B5%D0%B7%D0%BD%D1%8B%D1%85+%D0%92%D0%B5%D0%BB%D0%B8%D0%BA%D0%BE%D0%B3%D0%BE+%D0%9D%D0%BE%D0%B2%D0%B3%D0%BE%D1%80%D0%BE%D0%B4%D0%B0%29

Nieprawidłowa wartość __utmz Cookie to 37098290.1322168259.5.3.utmcsr=feedburner|utmccn=Feed:%20cafenovru%20(Опись%20трапезных%20Великого%20Новгорода)|utmcmd=twitter

Nielegalne cookie ustawione przez Analytics JavaScript w pierwszym dostępie stron, a na kolejnych żądań pojawia się błąd po stronie serwera.

+0

Problem polega na tym, że ciasteczko jest zepsute (to ciasteczko jest legalne), ale tak naprawdę nie ma rozwiązania innego niż poprawka Cookie. –

+0

Czy należy zatem naprawić moduł Pythona? –

+2

Tak, moduł Cookie musi zostać ulepszony, aby obsługiwać bardziej nowoczesne dokumenty RFC. –

Odpowiedz

5

Wiem, że to prawdopodobnie nie jest odpowiedź, której szukasz, ale najlepszym rozwiązaniem tego błędu jest aktualizacja z ga.js do analytics.js. Analytics.js to najnowsza wersja internetowej biblioteki śledzenia Google Analytics i jest częścią universal analytics. Analytics.js pisze tylko jeden plik cookie, więc całkowicie unika tego problemu.

Trudnym problemem z tym błędem jest jego długi czas i wielu użytkowników GA ma już obejścia. Naprawienie tego spowodowałoby awarię wielu z tych witryn, więc myślę, że jest mało prawdopodobne, że Google coś z tym zrobi, zwłaszcza, że ​​narzędzie analytics.js już naprawiło ten problem, a ga.js will soon be deprecated.

Jeszcze raz wiem, że nie jest to odpowiedź, której szukasz, ale chcę tylko powtórzyć, że wdrożenie jakiegokolwiek obejścia tego problemu będzie najprawdopodobniej ogromną stratą czasu. Będziesz musiał szybko uaktualnić, a wtedy twoje obejście będzie niepotrzebne.

Oto kilka dodatkowych informacji na temat analizy.js używa ciasteczek: https://developers.google.com/analytics/devguides/collection/analyticsjs/domains

+0

Prawdopodobnie powinienem być bardziej szczegółowy, nie jestem do końca pewien, czy dany plik cookie pochodzi z Analytics. Ponadto - chcę rozwiązać problem raz na zawsze - nie w konkretnym przypadku GA, który już uaktualniłem do analytics.js – julkiewicz

+0

@julkiewicz Nie mam pojęcia, czego szukasz, ponieważ webpy ma teraz swoją własną logikę obejść ten problem w domyślnym parsowaniu pythona. https://github.com/webpy/webpy/issues/148 – lossleader

+0

@lossleader Używam Pyramid, gdy podobno pojedynczy nieprawidłowy plik cookie (ustawiony przez stronę trzecią) może spowodować wyjątek w aplikacji. Szukam sposobu na obejście tego. – julkiewicz

1

To pachnie jak kodowanie UTF-8. Lub gorzej, możesz używać KOI8-R lub Windows 1251.

W każdym razie istnieją sposoby na uniknięcie problemów. Jednym ze sposobów jest zakodowanie łańcucha cookie Base64 przed wysłaniem go, w ten sposób cyrylicy są bezpiecznie ukryte.

Ale spójrz na swój kod. Jeśli nie jesteś UTF-8 kodujący ciąg znaków cookie przed jego zapisaniem, może to również rozwiązać problem. Kiedy patrzę przez ciąg, wydaje się, że są to pary kodów z pierwszym kodem, zawsze będącym D0 lub D1. Sugeruje to, że używasz nieprzetworzonego Unicode na Pythonie skompilowanym z 16-bitowymi znakami Unicode lub używając kodowania UCS-2 dla ciągu znaków zamiast UTF-8.

+0

Nie ustawiam tego ciasteczka, robi to Google Analytics JavaScript w przeglądarce. –