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中使用logging模块打印log日志详解
Apr 05 Python
python从入门到精通(DAY 3)
Dec 20 Python
最近Python有点火? 给你7个学习它的理由!
Jun 26 Python
Python时间的精准正则匹配方法分析
Aug 17 Python
对Python 文件夹遍历和文件查找的实例讲解
Apr 26 Python
Python基于win32ui模块创建弹出式菜单示例
May 09 Python
keras自动编码器实现系列之卷积自动编码器操作
Jul 03 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
Aug 26 Python
python利用paramiko实现交换机巡检的示例
Sep 22 Python
python实现跨年表白神器--你值得拥有
Jan 04 Python
pycharm部署django项目到云服务器的详细流程
Jun 29 Python
python图像处理 PIL Image操作实例
Apr 09 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 和 XML: 使用expat函数(二)
2006/10/09 PHP
php array_values 返回数组的值实例详解
2016/11/17 PHP
php 如何设置一个严格控制过期时间的session
2017/05/05 PHP
jQuery封装的获取Url中的Get参数示例
2013/11/26 Javascript
javascript中取前n天日期的两种方法分享
2014/01/26 Javascript
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
2015/10/29 Javascript
详解jQuery向动态生成的内容添加事件响应jQuery live()方法
2015/11/02 Javascript
浏览器兼容的JS写法总结
2016/04/27 Javascript
详解AngularJs中$sce与$sceDelegate上下文转义服务
2016/09/21 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
2016/10/14 Javascript
js事件委托和事件代理案例分享
2017/07/25 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
2017/08/11 Javascript
angular.extend方法的具体使用
2017/09/14 Javascript
vue实现登录后页面跳转到之前页面
2018/01/07 Javascript
微信小程序实现笑脸评分功能
2018/11/03 Javascript
layui文件上传控件带更改后数据传值的方法
2019/09/23 Javascript
Vue.js仿Select下拉框效果
2020/02/18 Javascript
微信小程序scroll-view的滚动条设置实现
2020/03/02 Javascript
vue开发移动端底部导航条功能
2020/04/08 Javascript
vue组件开发之tab切换组件使用详解
2020/08/21 Javascript
[00:23]DOTA2群星共贺开放测试 25日无码时代来袭
2013/09/23 DOTA
Python原始字符串与Unicode字符串操作符用法实例分析
2017/07/22 Python
python实现微信打飞机游戏
2020/03/24 Python
Python基于Socket实现简易多人聊天室的示例代码
2020/11/29 Python
Python从MySQL数据库中面抽取试题,生成试卷
2021/01/14 Python
CSS3 Media Queries(响应式布局可以让你定制不同的分辨率和设备)
2013/06/06 HTML / CSS
初中高效课堂实施方案
2014/02/26 职场文书
社会调查研究计划书
2014/05/01 职场文书
农村优秀教师事迹材料
2014/08/27 职场文书
党员个人总结范文
2015/02/14 职场文书
2015年大学生入党自荐书
2015/03/24 职场文书
网络舆情信息简报
2015/07/21 职场文书
家电创业计划书
2019/08/05 职场文书
新手入门Mysql--sql执行过程
2021/06/20 MySQL
Python移位密码、仿射变换解密实例代码
2021/06/27 Python
Python基础数据类型tuple元组的概念与用法
2021/08/02 Python