python使用cookie库操保存cookie详解


Posted in Python onMarch 03, 2014

Cookie用于服务器实现会话,用户登录及相关功能时进行状态管理。要在用户浏览器上安装cookie,HTTP服务器向HTTP响应添加类似以下内容的HTTP报头:

Set-Cookie:session=8345234;expires=Sun,15-Nov-2013 15:00:00 GMT;path=/;domain=baidu.com

expires是cookie的生存周期,path是cookie的有效路径,domain是cookie的有效域.

路径"path"用于设置可以读取一个cookie的最顶层的目录.将cookie的路径设置为你的网页最顶层的目录可以让该该目录下的所有网页都能访问该cookie.

方法:在你的cookie中加入path=/; 如果你只想让"food" 目录中的网页可以使用该cookie,则你加入path=/food.

domain:有些网站有许多小的域名,例如百度可能还在"news.baidu.com" "zhidao.baidu.com" 和"v.baidu.com" 域名下有网页.如果想让"baidu.com"下的所有机器都可以读取该cookie,必须在cookie中加入 "domain=.baidu.com" .

用户浏览器会存储Cookie直到过期,浏览器会向符合path和domain的服务器发送类似以下内容的HTTP请求报头:

Cookie:session=8345234。

例如,登陆www.baidu.com的时候,百度服务器发送回的HTTP响应报头中cookie是:

Set-Cookie:H_PS_PSSID=4681_4567_1452_9876_4759; path=/; domain=.baidu.com
Set-Cookie:BDSVRTM=74; path=/

浏览器的HTTP请求报头:

Cookie:BAIDUID=0FD996SDFG12********107B9C227F4C:FG=1; locale=zh; bdshare_firstime=1384567418140; NBID=D830DD2345HH2818A9F4134E5A2D778D3B:FG=1; H_PS_LC=4_shadu2014; BD_CK_SAM=1; H_PS_PSSID=4681_4567_1452_9876_4759

浏览器将cookie发送回HTTP服务器时,使用key=value字符串的编码形式,不返回expires,path和domain等可选属性。

cookie字符串通常位于HTTP_COOKIE环境变量中,可以如下读取:

import os
print "Content-type: text/plain\n"
if "HTTP_COOKIE" in os.environ:
    print os.environ["HTTP_COOKIE"]
else:
    print "HTTP_COOKIE not set!"

Python中Cookie模块(python3中为http.cookies)提供了一个类似字典的特殊对象SimpleCookie,其中存储并管理着称为Morsel的cookie值集合。

每个Morsel都有name,value以及可选属性(expires,path,domain,comment,max-age,secure,version,httponly)。

SimpleCookie可使用output()方法创建以HTTP报头形式表示的cookie数据输出,用js_output()方法生成包含javascript代码的字符串。

用HTTP_COOKIE生成cookie:

cookie=Cookie.SimpleCookie(os.environ['HTTP_COOKIE'])
print cookie.output()

set cookie:

import Cookie
import datetime
import randomexpiration = datetime.datetime.now() + datetime.timedelta(days=30)
cookie = Cookie.SimpleCookie()
cookie["session"] = random.randint(1,1000000000)
cookie["session"]["domain"] = ".baidu.com"
cookie["session"]["path"] = "/"
cookie["session"]["expires"] = expiration.strftime("%a, %d-%b-%Y %H:%M:%S PST")
print "Content-type: text/plain"
print cookie.output()
print
print "Cookie set with: " + cookie.output()

输出:

Content-type: text/plain
Set-Cookie: session=155209565; Domain=.jayconrod.com; expires=Mon, 03-Mar-2014 07:42:47 PST; Path=/
Cookie set with: Set-Cookie: session=155209565; Domain=.jayconrod.com; expires=Mon, 03-Mar-2014 07:42:47 PST; Path=/
Python 相关文章推荐
python实现12306火车票查询器
Apr 20 Python
python中字符串的操作方法大全
Jun 03 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
Jan 29 Python
Python中如何使用if语句处理列表实例代码
Feb 24 Python
Python列表(list)所有元素的同一操作解析
Aug 01 Python
使用apiDoc实现python接口文档编写
Nov 19 Python
python 实现线程之间的通信示例
Feb 14 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
Feb 28 Python
基于python实现计算两组数据P值
Jul 10 Python
利用Python实现Json序列化库的方法步骤
Sep 09 Python
利用python Pandas实现批量拆分Excel与合并Excel
May 23 Python
 python中的元类metaclass详情
May 30 Python
简单的通用表达式求10乘阶示例
Mar 03 #Python
python显示天气预报
Mar 02 #Python
pyqt4教程之实现半透明的天气预报界面示例
Mar 02 #Python
windows下python模拟鼠标点击和键盘输示例
Feb 28 #Python
python抓取网页中的图片示例
Feb 28 #Python
使用python分析git log日志示例
Feb 27 #Python
python去掉字符串中重复字符的方法
Feb 27 #Python
You might like
用定制的PHP应用程序来获取Web服务器的状态信息
2006/10/09 PHP
PHP实现简单的新闻发布系统实例
2015/07/28 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
2015/11/19 PHP
php往mysql中批量插入数据实例教程
2018/12/12 PHP
jWiard 基于JQuery的强大的向导控件介绍
2011/10/28 Javascript
jquery Tab效果和动态加载的简单实例
2013/12/11 Javascript
js验证IP及子网掩码的合法性有效性示例
2014/04/30 Javascript
实例讲解JQuery中this和$(this)区别
2014/12/08 Javascript
javascript实现拖放效果
2015/12/16 Javascript
基于d3.js实现实时刷新的折线图
2016/08/03 Javascript
Js操作DOM元素及获取浏览器高宽的简单方法
2016/09/08 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
BootStrap中Table分页插件使用详解
2016/10/09 Javascript
JavaScript实现时钟滴答声效果
2017/01/29 Javascript
AngularJS实现单一页面内设置跳转路由的方法
2017/06/28 Javascript
Nodejs下使用gm圆形裁剪并合成图片的示例
2018/02/22 NodeJs
浅谈vue首屏加载优化
2018/06/28 Javascript
微信小程序获取当前时间及星期几的实例代码
2020/09/20 Javascript
[03:46]DAC趣味视频-中文考试.mp4
2017/04/02 DOTA
用python结合jieba和wordcloud实现词云效果
2017/09/05 Python
PyTorch 1.0 正式版已经发布了
2018/12/13 Python
Python调用百度根据经纬度查询地址的示例代码
2019/07/07 Python
Django密码系统实现过程详解
2019/07/19 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
2019/11/26 Python
Python实现对word文档添加密码去除密码的示例代码
2020/12/29 Python
一款纯css3实现的鼠标悬停动画按钮
2014/12/29 HTML / CSS
HTML5验证以及日期显示的实现详解
2013/07/05 HTML / CSS
德国价格合理的品牌商品购物网站:averdo
2019/03/21 全球购物
Hobbs官方网站:英国奢华女性时尚服装
2020/02/22 全球购物
全球性的众包图形设计市场:DesignCrowd
2021/02/02 全球购物
解释一下ArrayList Vector和LinkedList的实现和区别
2013/04/26 面试题
家长对孩子评语
2014/01/30 职场文书
军训学生自我鉴定
2014/02/12 职场文书
介绍信模板
2015/01/31 职场文书
2015年乡镇卫生院工作总结
2015/04/22 职场文书
MySQL定时备份数据库(全库备份)的实现
2021/09/25 MySQL