CookieError:非法键值
我在使用 web.py,这个框架内部会用到 cookie.SimpleCookie
这个类来处理从用户浏览器发来的 cookies。
有时候,我会遇到一些错误,比如:
...
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,也不太清楚它是怎么在我的域名下被设置的(可能是代理的问题?),但这并不重要;更大的问题是,当 simplecookie 遇到这个 cookie 时会崩溃,并给用户返回错误。
所以,我想问的是:有没有办法让 SimpleCookie
忽略那些无效的 cookies,而返回其他有效的 cookies?我在文档里找不到明显的解决办法。
3 个回答
0
我的webpy应用在Firefox浏览器中遇到了一个问题,错误信息是CookieError: Illegal key value: )|utmcmd
,这个是Google Analytics设置的。为了解决这个问题,我尝试通过重定向来设置正确的值。
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
2
在设置 cookie 名称的时候,千万不要加空格。如果 cookie 名称里有空格,或者在 cookie 名称的引号里有空格,就会出现 CookieError: Illegal key value
这个错误。
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