2011-08-22 8 views
6

मैं web.py का उपयोग करता हूं, जो उपयोगकर्ता के ब्राउज़र से आने वाली कुकीज़ लोड करने के लिए आंतरिक रूप से cookie.SimpleCookie कक्षा का उपयोग करता है।कुकी एरर: अवैध कुंजी मान

कभी कभी, मैं जैसे अपवादों मिलती है: हमलावर चरित्र लगता है

... 
    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 से पूछने का कोई तरीका है कि अमान्य कुकीज़ को अनदेखा करें, लेकिन बाकी को वापस कर दें? ऐसा करने के लिए मुझे दस्तावेज़ों में कुछ भी स्पष्ट नहीं मिला।

+0

क्या आप कुकी कुकी अपवाद को पकड़ नहीं सकते? – GWW

+0

मैं (और चाहिए) कर सकता हूं, लेकिन क्योंकि यह एक अपवाद है, इसलिए मैं अपने सत्र कुकी सहित अन्य कुकीज़ तक नहीं पहुंच सकता। और बाद के अनुरोधों में अभी भी वही कुकी होगी जो त्रुटि उत्पन्न करती है। इसके अलावा, अगर यह प्रॉक्सी से आ रहा है, तो इसे अनसेट करने का प्रयास करना व्यर्थ हो जाएगा, क्योंकि प्रॉक्सी इसे अगली बार फिर से सेट कर देगा। – dcrosta

उत्तर

0

मेरा वेबपी ऐप फ़ायरफ़ॉक्स ब्राउज़र में 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 
+0

दुर्भाग्यवश यह मेरे लिए काम नहीं करेगा, क्योंकि एक कुकी सेट करने का प्रयास करने का प्रयास जिसका नाम अवैध है, अभी भी कुकी त्रुटि फेंक देगा। यह बदले में कुकी को हटा नहीं देता है, और समस्या अगली बार वापस आती है। – dcrosta

+0

क्या कुकी के नाम या मूल्य में अवैध वर्ण हैं? मेरे मामले में यह मान है, इसलिए मैं इसे सही मान के साथ रीसेट करता हूं और उसी यूआरएल पर रीडायरेक्ट करता हूं - इसलिए गलत कुकी तय हो जाती है। –

+0

मुझे लगता है कि आगे की कमी अवैध हैं। प्रत्येक ब्राउज़र मैंने इस कुकी को ठीक काम में डाला है, लेकिन 'कुकी' मॉड्यूल ब्राउज़र की तुलना में अधिक pedantic लगता है। – 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