在我发布到 feedburner 的提要中,我在跟踪设置 Feed: ${feedUri} ${feedName} 中的事件名称中有俄语字符。问题是它导致 Google Analytics 设置的 __utmz cookie 不正确,并且无法由我的后端(即 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

但是今天我什至在 Chrome 中也得到了这个“cookie_err=1”重定向。我在其他一些基于 web.py 和 Analytics 的网站上尝试过这个,它们都引发了内部服务器错误。并且这个错误一直持续到非法 cookie 被删除,这对于普通访问者来说是一件很难做到的事情。

我想知道我应该考虑哪些其他选择。也许 Python Cookie 模块不正确,或者是浏览器的错误导致了错误的 cookie。这个东西可以用于恶意目的,因为有很多使用 Google Analytics 和 Cookie 模块的 Python 网站。

这是跟踪查询: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
不正确的 __utmz cookie 值为 37098290.1322168259.5.3.utmcsr=feedburner|utmccn=Feed:%20cafenovru%20(Опись%20трапезных%20Великого%20Новгорода)|utmcmd=twitter
在第一次访问页面时,Analytics javascript 设置了非法 cookie,随后请求出现服务器端错误。

最佳答案

我知道这可能不是您正在寻找的答案,但解决此错误的最佳解决方案是将 ga.js 升级到 analytics.js 。 Analytics.js 是 Google Analytics 网络跟踪库的最新版本,是 universal analytics 的一部分。 Analytics.js 只写了一个 cookie,所以完全避免了这个问题。

这个 bug 的棘手问题是它已经存在很长时间了,许多 GA 用户都有现有的解决方法。现在修复它会破坏很多这些网站,所以我认为谷歌不太可能对此做任何事情,特别是因为 analytics.js 已经修复了这个问题,而 ga.js will soon be deprecated

再一次,我知道这不是您正在寻找的答案,但我只想重申,您自己针对此问题实现任何解决方法很可能会浪费大量时间。无论如何,您必须尽快升级,然后您的解决方法就没有必要了。

以下是有关 analytics.js 如何使用 cookie 的更多信息:
https://developers.google.com/analytics/devguides/collection/analyticsjs/domains

关于javascript - 谷歌分析非法 cookie 破坏了 Python 后端,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8262477/

10-12 16:51