每日一“酷”之Cookie
Cookie---Http Cookie
作用:Cookie模块定义一些类来解析和创建HTTP cookie首部
Cookie模块为大多数符合RFC 2109的cookie实现一个解析器。这个实现没有标准那么严格,因为,MSIE 3.0X并不支持整个标准。
RFC 2109 HTTP状态管理机制
1、 创建和设置Cookie
可以用Cookie为机遇浏览器的应用实现状态管理,因此,Cookie通常由服务器设置,并由客户存储和返回。下面是一个创建cookie的最简单的例子。
import Cookie
c= Cookie.SmartCookie()
c['mycookie'] = 'cookie_vale'
print c
运行结果:

输出一个合法的Set-Cookie首部,可以作为HTTP响应的一部分传递到客户。
2、 Morsel
还可以控制cookie的气体方面,如到期时间、路径和域。实际上cookie的所有RFC都可以通过表示cookie值的Morsel对象来管理。
RFC: Request For Comments (RFC),是一系列以编号排定的文件。文件收集了有关因特网相关资讯,以及UNIX和因特网社群的软件文件。目前RFC文件是由Internet Society(ISOC)所赞助发行。
这个例子使用两个不同的方法设置所存储cookie的到期时间,其中一个将max-age谁知为秒,另一个expires设置为日期时间,到达这个日期时间就会丢弃这个cookie
import Cookie
import datetime def show_cookie(c):
print c
for key,morsel in c.iteritems():
print 'key = ',morsel.key
print ' value = ',morsel.value
print ' coded_value = ',morsel.coded_value
for name in morsel.keys():
if morsel[name]:
print ' %s = %s' % (name,morsel[name]) c = Cookie.SimpleCookie() c['encode_value_cookie'] = '"cookie_value"'
c['encode_value_cookie']['comment'] = 'Value has escaped quotes' c['restricted_cookie'] = 'cookie_value'
c['restricted_cookie']['path'] = '/sub/path'
c['restricted_cookie']['domain'] = 'PyMotw'
c['restricted_cookie']['secure'] = True c['with_max_age'] = 'expires in 5 minutes'
c['with_max_age']['max-age'] = 300 #seconds 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 expires_at_time = expires.strftime('%a, %d %b %Y %H:%M%S')
c['expires_at_time']['expires'] = expires_at_time show_cookie(c)
运行结果:
Cookie和Morsel对象与字典类似。Morsel响应一个固定的键集。
expires
path
comment
domain
max-age
secure
version
Cookie实例的键是所存储各个cookie的名称。这个信息也可以从Morsel的键属性得到。
3、 编码值
cookie 首部要求对只编码,才能正确地解析
import Cookie
c = Cookie.SimpleCookie()
c['interger'] = 5
c['string_with_quotes'] = 'He said, "Hello, World"'
for name in ['interger','string_with_quotes']:
print c[name].key
print ' %s' % c[name]
print ' value = %r' % c[name].value
print ' coded_value = %r' % c[name].coded_value
运行结果:

Morsel.value 是cookie的解码值,而Morsel.coded_value表示则用来将值传输到客户,这两个值都是串。如果保存到cookie的值不是串将会自动转换。
4、 接收和解析Cookie首部
一旦客户接收到Set-Cookie首部,在后续请求中它会使用一个Cookie首部把这些cookie返回到服务器。到来的Cookie首部串可能包含多个cookie值,由分号分隔(;)
Cookie:interger = 5;string_with_quote = “He said,\”Hello,World\””
取决于Web服务器和框架,可以直接从首部或HTTP_COOKIE环境标量的到cookie
import Cookie
HTTP_COOKIE = ';'.join([
r'integer = 5',
r'string_with_quotes = HelloWorld',
])
print 'From constructor:'
c= Cookie.SimpleCookie(HTTP_COOKIE)
print c
print 'From load()'
c = Cookie.SimpleCookie()
c.load(HTTP_COOKIE)
print c
运行结果:
要对其解码,实例化时可以将串(但不包括部首前缀)传递到SimpleCookie,或者使用load()方法
5、 候选输出格式
出了使用Set-Cookie首部外,服务器还可以提供JavaScript,向客户添加cookie. SimpleCookie和Morsel通过js_output()方法来提供JavaScript输出。
import Cookie
c = Cookie.SimpleCookie()
c['mycookie'] = 'cookie_value'
c['another_cookie'] = 'second value'
print c.js_output()
运行结果:

6、 废弃的类
所有这些例子都是用了SimpleCookie。Cookie模块还提供了另外两个类,SerialCookie 和 SmartCookie。 SerialCookie可以处理任何可pickle的值。SmartCookie能确定一个值是否需要接触pickle,或者这是否是一个简单值
注:由于这两个类都是用pickle,它们存在潜在的安全漏洞。最好不要使用。更安全的做法是在服务器上存储状态, 并为客户同一个会话秘钥。
每日一“酷”之Cookie的更多相关文章
- 每日一“酷”之Queue
Queue—线程安全的FIFO实现 作用:提供一个线程安全的FIFO实现 Queue模块提供了一个适用于多线程编程的先进先出(first-in,first-out)数据结构,可以用来在生产者和消费者线 ...
- 每日一“酷”之pprint
pprint – 美观打印 作用:美观打印数据结构 pprint 包含一个“美观打印机”,用于生成数据结构的一个美观视图.格式化工具会生成数据结构的一些表示,不仅可以由解释器正确地解析,而且便于人类阅 ...
- 每日一“酷”之copy
Copy – 复制对象 作用:提供一些函数,可以使用浅副本或深副本语义复制对象. copy模块包括两个函数copy()和deepcopy(),用于复制现有的对象 1. 浅副本 copy()创建的浅副 ...
- 每日一“酷”之heapq
作用:heapq模块实现一个适用于Python列表的最小堆排序算法 堆(heap)是一个属性数据结构,其中子节点与父节点是一种有序关系.二叉堆是一种特殊的堆,二叉堆是完全二元树(二叉树)或者是近似完全 ...
- 每日一“酷”之bisect
作用:维护有序列表,而不必在每次想列表增加一个元素时调用sort排序 bisect 模块实现了一个算法用于向列表中插入元素,同时仍保持列表有序.有些情况下,这比反复对一个了表序列更高效,另外也比构建一 ...
- 每日一“酷”之array
array--国定类型数据序列 array模块定义一个序列数据结构,看起来和list非常相似,只不过所有成员都必须是相同的基本类型. 1.初始化 array实例化时可以提高一个参数来描述允许哪个种数据 ...
- 每日一“酷”之difflib
介绍:difflib 比较序列.该模块包含一些用来计算和处理序列直接差异的工具.她对于比较文本尤其用,其中包含的函数可以使用多种常用差异格式生成报告. 测试数据(splitlines()按行划分为序列 ...
- 每日一“酷”之textwrap
介绍:需要美观打印时,可以使用textwrap模块来格式化要输出的文本,这个模块允许通过编程提高类似段落自动换行或填充特性等功能. 1 创建实例数据 sample_text = ''' I’m ver ...
- 每日一“酷”之string
介绍:string模块可以追溯到最早的Python版本中.现在很多的被移植为str和unicode对象的方法,在python3.0中会被完全去除.string模块中,有很多有用的常量和累,用来处理st ...
随机推荐
- codeforces Good Bye 2013 379D New Year Letter
题目链接:http://codeforces.com/problemset/problem/379/D [题目大意] 告诉你初始字符串S1.S2的长度和递推次数k, 使用类似斐波纳契数列的字符串合并的 ...
- QTREE2 spoj 913. Query on a tree II 经典的倍增思想
QTREE2 经典的倍增思想 题目: 给出一棵树,求: 1.两点之间距离. 2.从节点x到节点y最短路径上第k个节点的编号. 分析: 第一问的话,随便以一个节点为根,求得其他节点到根的距离,然后对于每 ...
- Part 4 Identity Column in SQL Server
Identity Column in SQL Server If a column is marked as an identity column, then the values for this ...
- WPF视频教程系列笔记
视频二:XAML基础 1.顶级元素 <Window></Window>,<Page></Page>,<Application></Ap ...
- github 学习笔记【一】
这几天在学习github ,其实学了主要用来管理自己的项目!因为要在家里和公司两头做! 所以就开始学习使用!目前熟练几个命令,其他的一边用一遍学吧!想一举成功应该是不太可能的! 反复记忆才能更好,据说 ...
- 20150303--从SQL中获取数据的三级联动
省市地区的三级联动,每变更一次所选地都需要提交,但是又不需要把整个页面提交,所以我们需要使用控件:UdataPanel.工具--AJAX扩展 还有ScriptManager,并要将其放在页面的最顶端. ...
- 分享10款功能强大的HTML5/CSS3应用插件
1.纯CSS3美化Checkbox和Radiobox按钮 外观很时尚 利用CSS3我们可以打造非常具有个性化的用户表单,今天我们就利用CSS3美化Checkbox复选框和Radiobox单选框.CSS ...
- 济南学习 Day 3 T3 am
选数字 (select)Time Limit:3000ms Memory Limit:64MB题目描述LYK 找到了一个 n*m 的矩阵,这个矩阵上都填有一些数字,对于第 i 行第 j 列的位置上的数 ...
- Word 录制宏解决粘贴网络上文字格式错乱
本文将利用Word中的录制宏来解决 复制粘贴网络上文字格式错乱的问题. 本文宏代码取自 : 知乎 李文超,感谢他的提供. Technorati 标签: Word宏 格式修正 1 ...
- IEEE 802.15.4协议学习之物理层
在详细讲述IEEE 802.15.4协议之前,谈谈自己这两个星期看协议过程中的一点心得,或者是收获吧. 看协议文档,一定要看有书签的,边看边在旁边做些备注,以便于后期整理.对于协议层次相关的,最好在纸 ...