I'm developing an app on the Google App Engine and have run into a problem. I want to add a cookie to each user session so that I will be able to differentiate amongst the current users. I want them all to be anonymous, thus I do not want a login. Therefor I've implemented following code for cookies.
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 defaultdef 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 stuffraise ValueError("Invalid cookie %r:%r" % (name,value))new_cookie = Cookie.BaseCookie()new_cookie[name] = valueif domain:new_cookie[name]["domain"] = domainif 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"] = pathfor morsel in new_cookie.values():self.response.headers.add_header('Set-Cookie',morsel.OutputString(None))
To test the above code I've used the following code:
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
When I run this the header in the HTML file looks as follows:
NoneStatus: 200 OKContent-Type: text/html; charset=utf-8Cache-Control: no-cacheSet-Cookie: MyCookie=NewValue; expires=Thu, 06 Dec 2012 17:55:41 GMT; Path=/Content-Length: 1199
"None" in the above refers to the "value1" from the code.
Can you please tell me why the cookie value is "None", even when it is added to the header?
Your help is very much appreciated.