Zajmuję się tworzeniem aplikacji na Google App Engine i napotkam problem. Chcę dodać plik cookie do każdej sesji użytkownika, aby móc odróżnić obecnych użytkowników. Chcę, aby wszyscy byli anonimowi, więc nie chcę logowania. Dlatego zaimplementowałem następujący kod dla plików cookie.Pliki cookie za pomocą Pythona i Google App Engine
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))
Aby przetestować powyższy kod Użyłem następujący kod:
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
Kiedy uruchomić ten nagłówek w pliku HTML wygląda następująco:
Żaden status : 200 OK Content-Type: text/html; charset = utf-8 Cache-Control: no-cache Set-Cookie: MyCookie = NewValue; wygasa = czw, 06 grudnia 2012 17:55:41 GMT; Ścieżka =/ Długość treści: 1199
"Brak" w powyższym opisie odnosi się do "wartości1" z kodu.
Czy możesz mi powiedzieć, dlaczego wartość cookie to "Brak", nawet jeśli jest dodana do nagłówka?
Twoja pomoc jest bardzo cenna.
Dziękuję bardzo za odpowiedź, ale niestety nie otrzymuję innego wyniku, gdy ponownie odwiedzam stronę. Jestem otwarty na inne sugestie? – Maal
Przepraszamy. Właśnie zdałem sobie sprawę, że jesteś w 100% poprawny. Dziękuję Ci bardzo. – Maal