Незаконные файлы cookie Google Analytics ломают бэкэнд Python

В моем фиде, который публикуется на feedburner, у меня есть русские символы в названии кампании в настройках отслеживания Feed: ${feedUri} ${feedName}. Проблема в том, что в результате получается неверный файл cookie __utmz, установленный Google Analytics, и он не может быть обработан моим сервером (которым является web.py).

  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

Эта ошибка произошла в Firefox, и мне удалось исправить ее с помощью этого кода:

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

Но сегодня я получил перенаправление cookie_err = 1 даже в Chrome. Я пробовал это на некоторых других сайтах, основанных на web.py и Analytics, и все они вызывают внутреннюю ошибку сервера. И эта ошибка сохраняется до тех пор, пока незаконный файл cookie не будет удален, что является сложной задачей для обычного посетителя.

Я хочу знать, какие еще варианты мне следует рассмотреть. Возможно, модуль Python Cookie неверен, или это ошибка браузера, которая допускает неправильный файл cookie. Этот материал может использоваться в злонамеренных целях, потому что существует множество веб-сайтов Python, которые используют модуль Google Analytics и Cookie.

Это отслеживающий запрос: 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

Неверное значение файла cookie __utmz: 37098290.1322168259.5.3.utmcsr=feedburner|utmccn=Feed:%20cafenovru%20(Опись%20трапезных%20Великого%20Новгорода)|utmcmd=twitter

Недопустимый файл cookie устанавливается JavaScript в Google Analytics при первом доступе к странице, и при последующих запросах появляется ошибка на стороне сервера.


person Andrey Kuzmin    schedule 24.11.2011    source источник
comment
Проблема в том, что Cookie не работает (этот файл cookie является законным), но на самом деле нет другого решения, кроме как исправить Cookie.   -  person Nick Bastin    schedule 25.11.2011
comment
Значит, нужно исправить модуль Python?   -  person Andrey Kuzmin    schedule 25.11.2011
comment
да, модуль Cookie необходимо улучшить для поддержки более современных RFC.   -  person Nick Bastin    schedule 25.11.2011
comment
Есть ли модуль, совместимый с файлами cookie, который это исправляет?   -  person Andrey Kuzmin    schedule 27.11.2011


Ответы (2)


Я знаю, что это, вероятно, не тот ответ, который вы ищете, но лучшее решение для этой ошибки - просто перейти с ga.js на analytics.js. Analytics.js - это новейшая версия библиотеки веб-отслеживания Google Analytics, которая является частью универсальной аналитики. Analytics.js записывает только один файл cookie, поэтому полностью избегает этой проблемы.

Сложная проблема с этой ошибкой в ​​том, что она существует уже давно, и у многих пользователей GA уже есть обходные пути. Если исправить это сейчас, это приведет к поломке многих из этих сайтов, поэтому я думаю, что Google вряд ли что-нибудь сделает с этим, тем более что analytics.js уже исправил эту проблему, а ga.js скоро станет нерекомендуемым.

Еще раз, я знаю, что это не тот ответ, который вы ищете, но я просто хочу повторить, что реализация любого обходного пути для этой проблемы самостоятельно, скорее всего, будет огромной тратой времени. В любом случае вам придется скоро выполнить обновление, и тогда в вашем обходном пути не будет необходимости.

Дополнительная информация о том, как analytics.js использует файлы cookie: https://developers.google.com/analytics/devguides/collection/analyticsjs/domains

person Philip Walton    schedule 03.09.2014
comment
Я, наверное, должен был быть более конкретным, я не совсем уверен, исходит ли рассматриваемый файл cookie из Google Analytics. Также - я хочу решить проблему раз и навсегда - не в конкретном случае GA, который я уже обновил до analytics.js. - person julx; 05.09.2014
comment
@julkiewicz Я не понимаю, что вы ищете, поскольку теперь у webpy есть собственная логика для решения этой проблемы при синтаксическом анализе файлов cookie по умолчанию в Python. github.com/webpy/webpy/issues/148 - person lossleader; 06.09.2014
comment
@lossleader Я использую Pyramid, где, по-видимому, один недопустимый файл cookie (установленный третьей стороной) может вызвать исключение в приложении. Я ищу способ обойти это. - person julx; 06.09.2014
comment
@julkiewicz, глядя на проект pylons webob / cookies.py (который использует пирамида), он воссоздал синтаксический анализ, в значительной степени реализовав те же ошибки, что и синтаксический анализатор по умолчанию. Так что это действительно отдельная (хотя, возможно, вырезанная и вставленная) ошибка. - person lossleader; 06.09.2014
comment
@lossleader Есть ли способ переключить модуль cookie по умолчанию на что-то еще или это единственный способ исправить это самостоятельно? Я был бы полностью готов исправить это, если бы знал, как это сделать (я использую virtualenv). - person julx; 07.09.2014
comment
@julkiewicz Для Pyramid, я думаю, вы хотели бы зарегистрировать ошибку с трассировкой стека и примером cookie здесь: github .com / Pylons / webob / issues - person lossleader; 08.09.2014
comment
Я задал этот вопрос довольно давно. И с тех пор я уже использую новую библиотеку трекинга. Но спасибо за совет, теперь я могу удалить код, который помогает обойти проблему. - person Andrey Kuzmin; 16.09.2014

Это пахнет проблемой кодировки UTF-8. Или, что еще хуже, вы можете использовать KOI8-R или Windows 1251.

В любом случае есть способы избежать проблем. Один из способов - кодировать вашу строку cookie в Base64 перед ее отправкой, чтобы символы кириллицы были надежно скрыты.

Но взгляните на свой код. Если вы не используете кодировку UTF-8 для строки cookie перед ее записью, это также может решить проблему. Когда я просматриваю строку, кажется, что это пары кодов, первый из которых всегда D0 или D1. Это говорит о том, что вы используете необработанный Unicode на Python, скомпилированном с 16-битными символами Unicode, или используете кодировку UCS-2 для строки вместо UTF-8.

person Michael Dillon    schedule 25.11.2011
comment
Я не устанавливаю этот файл cookie, это делается с помощью Google Analytics JavaScript в браузере. - person Andrey Kuzmin; 25.11.2011