2012-11-26 16 views
5

का उपयोग कर कुकीज़ मैं Google ऐप इंजन पर एक ऐप विकसित कर रहा हूं और एक समस्या में भाग गया हूं। मैं प्रत्येक उपयोगकर्ता सत्र में एक कुकी जोड़ना चाहता हूं ताकि मैं मौजूदा उपयोगकर्ताओं के बीच अंतर कर सकूं। मैं उन्हें सभी को अज्ञात होना चाहता हूं, इस प्रकार मैं लॉगिन नहीं चाहता हूं। इसलिए मैंने कुकीज़ के लिए निम्नलिखित कोड लागू किया है।पायथन और Google ऐप इंजन

कोई नहीं स्थिति: जब मैं इस HTML फ़ाइल में हेडर को इस तरह लग रहा है चलाने

class HomeHandler(webapp.RequestHandler): 
    def get(self): 
     self.set_cookie(name="MyCookie",value="NewValue",expires_days=10) 
     value1 = str(self.get_cookie('MyCookie'))  
     print value1 

:

def clear_cookie(self,name,path="/",domain=None): 
    """Deletes the cookie with the given name.""" 
    expires = datetime.datetime.utcnow() - datetime.timedelta(days=365) 
    self.set_cookie(name,value="",path=path,expires=expires, 
        domain=domain)  

def clear_all_cookies(self): 
    """Deletes all the cookies the user sent with this request.""" 
    for name in self.cookies.iterkeys(): 
     self.clear_cookie(name)    

def get_cookie(self,name,default=None): 
    """Gets the value of the cookie with the given name,else default.""" 
    if name in self.request.cookies: 
     return self.request.cookies[name] 
    return default 

def set_cookie(self,name,value,domain=None,expires=None,path="/",expires_days=None): 
    """Sets the given cookie name/value with the given options.""" 

    name = _utf8(name) 
    value = _utf8(value) 
    if re.search(r"[\x00-\x20]",name + value): # Don't let us accidentally inject bad stuff 
     raise ValueError("Invalid cookie %r:%r" % (name,value)) 
    new_cookie = Cookie.BaseCookie() 
    new_cookie[name] = value 
    if domain: 
     new_cookie[name]["domain"] = domain 
    if expires_days is not None and not expires: 
     expires = datetime.datetime.utcnow() + datetime.timedelta(days=expires_days) 
    if expires: 
     timestamp = calendar.timegm(expires.utctimetuple()) 
     new_cookie[name]["expires"] = email.utils.formatdate(timestamp,localtime=False,usegmt=True) 
    if path: 
     new_cookie[name]["path"] = path 
    for morsel in new_cookie.values(): 
     self.response.headers.add_header('Set-Cookie',morsel.OutputString(None)) 

ऊपर कोड मैं का उपयोग किया है निम्नलिखित कोड का परीक्षण करने के : 200 ठीक सामग्री-प्रकार: टेक्स्ट/एचटीएमएल; charset = utf-8 कैश-कंट्रोल: नो-कैश सेट-कुकी: MyCookie = NewValue; समाप्ति = गुरु, 06 दिसंबर 2012 17:55:41 जीएमटी; पथ =/ सामग्री-लंबाई: 11 99

उपरोक्त में "कोई नहीं" कोड से "value1" को संदर्भित करता है।

क्या आप कृपया मुझे बता सकते हैं कि कुकी मूल्य "कोई नहीं" क्यों है, भले ही इसे हेडर में जोड़ा जाए?

आपकी सहायता बहुत सराहना की है।

उत्तर

3

जब आप set_cookie() पर कॉल करते हैं, तो यह कुकी को जिस प्रतिक्रिया की तैयारी कर रहा है उस पर कुकी सेट कर रहा है (यानी, यह आपके फ़ंक्शन के बाद प्रतिक्रिया भेजे जाने पर कुकी सेट करेगा)। get_cookie() पर आने वाली कॉल वर्तमान अनुरोध के शीर्षकों से पढ़ रही है। चूंकि वर्तमान अनुरोध में एक कुकी सेट नहीं था जिसके लिए आप परीक्षण कर रहे हैं, इसे पढ़ा नहीं जाएगा। हालांकि, अगर आप इस पृष्ठ पर फिर से जाना चाहते हैं, तो आपको एक अलग परिणाम मिलना चाहिए क्योंकि कुकी अब अनुरोध का हिस्सा होगी।

+0

आपके उत्तर के लिए बहुत बहुत धन्यवाद, लेकिन दुर्भाग्यवश मुझे पृष्ठ पर पुनर्विचार करते समय एक अलग परिणाम नहीं मिलता है। मैं अन्य सुझावों के लिए खुला हूं? – Maal

+0

क्षमा करें। मुझे अभी एहसास हुआ कि आप 100% सही हैं। आपका बहुत बहुत धन्यवाद। – Maal

संबंधित मुद्दे