12.6.2 Morsel
还可以控制cookie的其他方面,如到期时间、路径和域。实际上,cookie的所有RFC属性都可以通过表示cookie值的Morsel对象来管理。
from http import cookies
import datetime
def show_cookie(c):
print(c)
for key,morsel in c.items():
print()
print('key=',morsel.key)
print(' value=',morsel.value)
print(' coded_value',morsel.coded_value)
for name in morsel.keys():
if morsel[name]:
print(' {} = {}'.format(name,morsel[name]))
c = cookies.SimpleCookie()
# A cookie with a value that has to be encoded
# to fit into the header
c['encoded_value_cookie'] = '"cookie,value;"'
c['encoded_value_cookie']['comment'] = 'Has escaped punctuation'
# A cookie that applies to only part of a site
c['restricted_cookie'] = 'cookie_value'
c['restricted_cookie']['path'] = '/sub/path'
c['restricted_cookie']['domain'] = 'PyMOTW'
c['restricted_cookie']['secure'] = True
# A cookie that expires in 5 minutes
c['with_max_age'] = 'expires in 5 minutes'
c['with_max_age']['max-age'] = 300 # Seconds
# A cookie that expires at a specific time
c['expires_at_time'] = 'cookie_value'
time_to_live = datetime.timedelta(hours=1)
expires = (datetime.datetime(2009,2,14,18,30,14) +
time_to_live)
# Date format: Wdy, DD-Mon_YY HH:MM:SS GMT
expires_at_time = expires.strftime('%a, %d %b %Y %H:%M:%S')
c['expires_at_time']['expires'] = expires_at_time
show_cookie(c)
这个例子使用两个不同的方法设置到期的cookie。其中一个方法将max-age设置为一个秒数,另一个方法将expires设置为一个日期时间,达到这个日期时间就会丢弃这个cookie。
运行结果:
Cookie和Morsel对象都相当于字典。Morsel响应一个固定的键集:
expires
path
comment
domain
max-age
secure
version
Cookie实例的键是所存储的各个cookie的名。这个信息也可以从Morsel的键属性得到。