CookieError: недопустимое значение ключа - PullRequest
6 голосов
/ 22 августа 2011

Я использую web.py , который внутренне использует класс cookie.SimpleCookie для загрузки файлов cookie, поступающих из браузера пользователя.

Иногда я получаю исключения, такие как:

...
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/Cookie.py", line 455, in set
    raise CookieError("Illegal key value: %s" % key)
CookieError: Illegal key value: SinaRot/g/news.sina.com.cn

Символ-нарушитель, похоже, является косой чертой (/), которая, согласно моим прочтениям RFC 2109 (cookie) и RFC 2068 (HTTP 1.1), должна быть запрещенным, так что все в порядке.

Я не установил этот файл cookie, и я не уверен, почему или как он был установлен для моего домена (возможно, через прокси-сервер), но это не имеет значения; большая проблема заключается в том, что simplecookie терпит неудачу при обнаружении этого cookie и возвращает ошибку пользователю.

Итак, мой вопрос: есть ли способ попросить SimpleCookie просто игнорировать недействительные файлы cookie, но вернуть остальные? Я не мог найти ничего очевидного в документах, чтобы сделать это.

Ответы [ 2 ]

3 голосов
/ 13 сентября 2014

Это работает для меня.

def get_cookies():
    import Cookie
    ans = Cookie.SimpleCookie()
    for bit in os.environ.get('HTTP_COOKIE', '').split('; '):
        try:
            ans.load(bit)
        except Cookie.CookieError:
            pass
    return ans
0 голосов
/ 22 августа 2011

У моего веб-приложения CookieError: Illegal key value: )|utmcmd установлено Google Analytics в браузере 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()) 

if not web.config.debug:
    app.internalerror = myinternalerror
...