Подтвердить что ты не робот

Неверный файл cookie Google Analytics прерывает бэкэнд Python

В моем фиде, опубликованном в feedburner, у меня есть русские символы в названии кампании в настройках отслеживания Feed: ${feedUri} ${feedName}. Проблема состоит в том, что он является неправильным __utmz cookie, установленным 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 при первом доступе к странице, а на последующих запросах появляется ошибка на стороне сервера.

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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