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实现上传样本到virustotal并查询扫描信息的方法
Oct 05 Python
django 常用orm操作详解
Sep 13 Python
Python算法之图的遍历
Nov 16 Python
python实现感知器算法详解
Dec 19 Python
在Python中构建增广矩阵的实现方法
Jul 01 Python
python pip源配置,pip配置文件存放位置的方法
Jul 12 Python
python傅里叶变换FFT绘制频谱图
Jul 19 Python
python机器学习包mlxtend的安装和配置详解
Aug 21 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
Aug 31 Python
python 递归调用返回None的问题及解决方法
Mar 16 Python
python自动计算图像数据集的RGB均值
Jun 18 Python
OpenCV绘制圆端矩形的示例代码
Aug 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调用dll的实例操作动画与代码分享
2012/08/14 PHP
解密ThinkPHP3.1.2版本之模板继承
2014/06/19 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
2020/01/26 PHP
javascript中的几个运算符
2007/06/29 Javascript
通过Mootools 1.2来操纵HTML DOM元素
2009/09/15 Javascript
JavaScript中的console.log()函数详细介绍
2014/12/29 Javascript
jQuery获取复选框被选中数量及判断选择值的方法详解
2016/05/25 Javascript
js 声明数组和向数组中添加对象变量的简单实例
2016/07/28 Javascript
jQuery插件EasyUI获取当前Tab中iframe窗体对象的方法
2016/08/05 Javascript
Bootstrap模态窗口源码解析
2017/02/08 Javascript
jquery仿京东商品放大浏览页面
2017/06/06 jQuery
layui从数据库中获取复选框的值并默认选中方法
2018/08/15 Javascript
vue中el-upload上传图片到七牛的示例代码
2018/10/19 Javascript
vue中slot(插槽)的介绍与使用
2018/11/12 Javascript
vue 微信扫码登录(自定义样式)
2020/01/06 Javascript
jQuery实现简单日历效果
2020/07/05 jQuery
解决vue-pdf查看pdf文件及打印乱码的问题
2020/11/04 Javascript
MySQL中表的复制以及大型数据表的备份教程
2015/11/25 Python
Python中的条件判断语句基础学习教程
2016/02/07 Python
python提取具有某种特定字符串的行数据方法
2018/12/11 Python
Python爬虫实战之12306抢票开源
2019/01/24 Python
Python-Seaborn热图绘制的实现方法
2019/07/15 Python
Python银行系统实战源码
2019/10/25 Python
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
2014/11/05 HTML / CSS
html5实现多图片预览上传及点击可拖拽控件
2018/03/15 HTML / CSS
Raleigh兰令自行车美国官网:英国凤头牌自行车
2018/01/08 全球购物
OSPF有什么优点?为什么OSPF比RIP收敛快?
2013/02/13 面试题
英智兴达软件测试笔试题
2016/10/12 面试题
运动会100米解说词
2014/01/23 职场文书
党风廉设责任书
2014/04/16 职场文书
日语专业毕业生自荐书
2014/06/18 职场文书
村主任“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
开学第一周值周总结
2015/07/16 职场文书
关于办理居住证的介绍信模板
2019/11/27 职场文书
导游词之泉州崇武古城
2019/12/20 职场文书
JS实现数组去重的11种方法总结
2022/04/04 Javascript