我使用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,但返回其余的?我在文档中找不到任何明显的东西。
答案 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