我正在使用Google App Engine。如何使用单个响应设置多个cookie或多值cookie?
现在我正在使用网址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?
答案 0 :(得分:4)
使用两个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 :(得分:1)
因此,C.output()尝试发出2个完整的cookie响应头。您已清空标题名称,因此结果是由\ r \ n。
分隔的2个值您需要使用SimpleCookie吗?您可以在WebOb响应对象上set cookies directly。
self.response.set_cookie('emailAddress', self.request.get('emailAddress'))
self.response.set_cookie('secretCode', self.request.get('secretCode'), path='/')
答案 2 :(得分:1)
在你自己的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))