CookieError:非法键值

时间:2011-08-22 13:47:41

标签: python cookies web.py

我使用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(cookies)和RFC 2068(HTTP 1.1)的读取,应该不允许这样做,所以没关系。

我没有设置这个cookie,我不确定为什么或如何设置我的域(代理,也许?),但这是无关紧要的;更大的问题是,当遇到这个cookie时,simplecookie会失败,并向用户返回错误。

所以,我的问题是:有没有办法让SimpleCookie简单地忽略无效的cookie,但返回其余的?我在文档中找不到任何明显的东西。

3 个答案:

答案 0 :(得分:3)

这适合我。

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

答案 1 :(得分:1)

设置cookie名称时,请勿添加空格。如果Cookie名称中有空格,或者Cookie名称中的引号中有空格,它将向您发送CookieError: Illegal key value

答案 2 :(得分:0)

我的网络应用在Firefox浏览器中经过Google Analytics设置CookieError: Illegal key value: )|utmcmd。要解决此问题,我会尝试重定向尝试设置正确的值。

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