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比较两个列表大小的方法
Jul 11 Python
Python循环语句之break与continue的用法
Oct 14 Python
python开发之文件操作用法实例
Nov 13 Python
Python数据库的连接实现方法与注意事项
Feb 27 Python
python 将数据保存为excel的xls格式(实例讲解)
May 03 Python
python中计算一个列表中连续相同的元素个数方法
Jun 29 Python
python求解数组中两个字符串的最小距离
Sep 27 Python
对python数据切割归并算法的实例讲解
Dec 12 Python
对Python协程之异步同步的区别详解
Feb 19 Python
Django多进程滚动日志问题解决方案
Dec 17 Python
基于python 等频分箱qcut问题的解决
Mar 03 Python
python的help函数如何使用
Jun 11 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的FTP学习(一)[转自奥索]
2006/10/09 PHP
PHP把数字转成人民币大写的函数分享
2014/06/30 PHP
Yii核心组件AssetManager原理分析
2014/12/02 PHP
header与缓冲区之间的深层次分析
2016/07/30 PHP
workerman结合laravel开发在线聊天应用的示例代码
2018/10/30 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
2019/07/22 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
js电信网通双线自动选择技巧
2008/11/18 Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
2011/10/22 Javascript
Javascript的各种节点操作实例演示代码
2012/06/27 Javascript
实现局部遮罩与关闭原理及代码
2013/02/04 Javascript
JS 实现图片直接下载示例代码
2013/07/22 Javascript
js中prototype用法详细介绍
2013/11/14 Javascript
鼠标经过tr时,改变tr当前背景颜色
2014/01/13 Javascript
Blocksit插件实现瀑布流数据无限( 异步)加载
2014/06/20 Javascript
JS获取文件大小方法小结
2015/12/08 Javascript
AngularJS仿苹果滑屏删除控件
2016/01/18 Javascript
window.open不被拦截的简单实现代码(推荐)
2016/08/04 Javascript
JS+Canvas实现的俄罗斯方块游戏完整实例
2016/12/12 Javascript
微信小程序-小说阅读小程序实例(demo)
2017/01/12 Javascript
vue2.0设置proxyTable使用axios进行跨域请求的方法
2017/10/19 Javascript
vue-router 源码实现前端路由的两种方式
2018/07/02 Javascript
Javascript 实现 Excel 导入生成图表功能
2018/10/22 Javascript
vue中v-show和v-if的异同及v-show用法
2019/06/06 Javascript
基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)
2019/10/23 Javascript
数据挖掘之Apriori算法详解和Python实现代码分享
2014/11/07 Python
Python的Flask框架及Nginx实现静态文件访问限制功能
2016/06/27 Python
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
python基础教程之while循环
2019/08/14 Python
Python3 chardet模块查看编码格式的例子
2019/08/14 Python
详解通过变换矩阵实现canvas的缩放功能
2019/01/14 HTML / CSS
意大利巧克力店:Chocolate Shop
2019/07/24 全球购物
五年级作文之想象作文
2019/10/30 职场文书
《工作是最好的修行》读后感3篇
2019/12/13 职场文书
python实现高效的遗传算法
2021/04/07 Python
Python max函数中key的用法及原理解析
2021/06/26 Python