2011-08-22 7 views
6

나는 내부적으로 cookie.SimpleCookie 클래스를 사용하여 사용자 브라우저에서 들어오는 쿠키를로드합니다. web.py을 사용합니다.CookieError : 잘못된 키 값

때때로, 나는 같은 예외를 얻을 : 기분을 상하게하는 문자 보인다

... 
    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 (쿠키)의 읽기와 RFC 2068 (HTTP 1.1)해야한다에 따라하는, 허용되지 않으므로 괜찮습니다.

이 쿠키를 설정하지 않았는데 왜 내 도메인 (프록시, 아마도?)에 대해 설정했는지 모르겠지만 관련이 없습니다. 큰 문제는이 쿠키를 발견하면 simplecookie가 실패하고 사용자에게 오류를 반환한다는 것입니다.

그럼 내 질문은 : SimpleCookie에게 단순히 유효하지 않은 쿠키는 무시하지만 나머지는 반환하도록 요청하는 방법이 있습니까? 나는 이것을하기 위해 문서에서 명백한 것을 발견 할 수 없었다.

+0

CookieError 예외를 잡을 수 없습니까? – GWW

+0

나는 예외가 있기 때문에 세션 쿠키를 포함하여 다른 쿠키에 액세스 할 수 없다. 후속 요청에는 여전히 오류를 일으킨 동일한 쿠키가 포함됩니다. 또한 프록시에서 오는 경우 프록시를 설정하지 않으려 고하면 프록시가 다음 번에 다시 설정하기 때문에 헛된 것입니다. – dcrosta

답변

0

내 webpy 앱은 Firefox 브라우저에서 Google 웹 로그 분석으로 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 
+0

이름이 불법 인 쿠키를 설정하려고 시도해도 여전히 쿠키 오류가 발생하기 때문에 불행히도이 기능이 작동하지 않습니다. 이렇게하면 쿠키가 삭제되지 않고 다음 번에 문제가 다시 발생합니다. – dcrosta

+0

쿠키의 이름이나 값에 잘못된 문자가 있습니까? 내 경우에는 값이므로 정확한 값으로 다시 설정하고 동일한 URL로 다시 리디렉션합니다. 따라서 잘못된 쿠키가 수정됩니다. –

+0

슬래시가 불법이라고 생각합니다. 이 쿠키를 삽입 한 모든 브라우저는 잘 작동하지만 '쿠키'모듈은 브라우저보다 더 현저한 것으로 보입니다. – dcrosta

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