GAE: настройка нескольких файлов cookie (или файлов с несколькими значениями) с помощью SimpleCookie - PullRequest
4 голосов
/ 26 октября 2011

Я использую Google App Engine. Как установить несколько файлов cookie или файл cookie с несколькими значениями с одним ответом?

Сейчас я использую этот код с URL http://localhost:8085/server/showcookie?emailAddress=myemail@gmail.com&secretCode=1

C = Cookie.SimpleCookie()
C["emailAddress"] = self.request.get('emailAddress')
C["secretCode"] = self.request.get('secretCode')
C["secretCode"]["path"] = "/"
header_value = C.output(header='')
self.response.headers.add_header("Set-Cookie", header_value)

, который не работает, потому что значение header_value равно emailAddress = "myemail@gmail.com" secretCode = 1; Path = /, который не является правильно сформированным заголовком (в нем отсутствует запятая). Как я могу создать правильно сформированный файл cookie с обоими значениями?

Ответы [ 3 ]

4 голосов
/ 29 октября 2011

Использование двух объектов SimpleCookie решает это:

C1 = Cookie.SimpleCookie()
C1["emailAddress"] = self.request.get('emailAddress')
C2 = Cookie.SimpleCookie()
C2["secretCode"] = self.request.get('secretCode')
C2["secretCode"]["path"] = "/"
self.response.headers.add_header("Set-Cookie", C1.output(header=''))
self.response.headers.add_header("Set-Cookie", C2.output(header=''))
1 голос
/ 01 ноября 2011

Slap в вашей собственной подпрограмме set_cookie ().

import datetime
import Cookie

def set_cookie(self, name, value, expires=None):
    """Set a cookie"""
    if value is None:
        value = 'deleted'
        expires = datetime.timedelta(minutes=-50000)
    jar = Cookie.SimpleCookie()
    jar[name] = value
    jar[name]['path'] = u'/'
    if expires:
        if isinstance(expires, datetime.timedelta):
            expires = datetime.datetime.now() + expires
        if isinstance(expires, datetime.datetime):
            expires = expires.strftime('%a, %d %b %Y %H:%M:%S')
        jar[name]['expires'] = expires
    self.response.headers.add_header(*jar.output().split(u': ', 1))

Вы вызываете функцию с помощью

set_cookie('my_cookie', 'things-you-want-to-add-in-the-cookie') 
set_cookie('1d_cookie', 'only-one-day', datetime.timedelta(minutes=1440)) 
1 голос
/ 26 октября 2011

Итак, C.output () пытается выдать 2 полных заголовка ответа cookie.Вы очистили имя заголовка, поэтому в результате получается 2 значения, разделенных \ r \ n.

Вам нужно использовать SimpleCookie?Вы можете установить куки непосредственно в объекте ответа WebOb.

self.response.set_cookie('emailAddress', self.request.get('emailAddress'))
self.response.set_cookie('secretCode', self.request.get('secretCode'), path='/')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...