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 相关文章推荐
ptyhon实现sitemap生成示例
Mar 30 Python
python 多线程实现检测服务器在线情况
Nov 25 Python
Python urls.py的三种配置写法实例详解
Apr 28 Python
Python之Web框架Django项目搭建全过程
May 02 Python
Python设计模式之观察者模式简单示例
Jan 10 Python
Python selenium抓取微博内容的示例代码
May 17 Python
python实现Excel文件转换为TXT文件
Apr 28 Python
Django视图扩展类知识点详解
Oct 25 Python
python matplotlib拟合直线的实现
Nov 19 Python
Python面向对象之多态原理与用法案例分析
Dec 30 Python
Pytorch通过保存为ONNX模型转TensorRT5的实现
May 25 Python
python利用xpath爬取网上数据并存储到django模型中
Feb 26 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中通过ADODB库实现调用Access数据库之修正版本
2006/12/31 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
2013/06/27 PHP
分割GBK中文遭遇乱码的解决方法
2013/08/09 PHP
部署PHP时的4个配置修改说明
2015/10/19 PHP
php ajax异步读取rss文档数据
2016/03/29 PHP
PHP设计模式之工厂模式详解
2017/10/24 PHP
javascript 折半查找字符在数组中的位置(有序列表)
2010/12/09 Javascript
JavaScript Promise启示录
2014/08/12 Javascript
js实现class样式的修改、添加及删除的方法
2015/01/20 Javascript
JS动态修改表格cellPadding和cellSpacing的方法
2015/03/31 Javascript
AngularJS实现用户登录状态判断的方法(Model添加拦截过滤器,路由增加限制)
2016/12/12 Javascript
JS正则表达式学习之贪婪和非贪婪模式实例总结
2016/12/26 Javascript
Bootstrap页面缩小变形的快速解决办法
2017/02/03 Javascript
Angularjs中使用指令绑定点击事件的方法
2017/03/30 Javascript
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
2019/06/19 Javascript
vue实现手机端省市区区域选择
2019/09/27 Javascript
js防抖函数和节流函数使用场景和实现区别示例分析
2020/04/11 Javascript
[02:12]探秘2016国际邀请赛中国区预选赛选手房间
2016/06/25 DOTA
python测试驱动开发实例
2014/10/08 Python
python登录豆瓣并发帖的方法
2015/07/08 Python
Python压缩解压缩zip文件及破解zip文件密码的方法
2015/11/04 Python
Python实现数据库并行读取和写入实例
2017/06/09 Python
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
2018/06/09 Python
Python 通过打码平台实现验证码的实现
2019/05/13 Python
Python Collatz序列实现过程解析
2019/10/12 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
2020/04/15 Python
Pygame的程序开始示例代码
2020/05/07 Python
python 引用传递和值传递详解(实参,形参)
2020/06/05 Python
opencv python 对指针仪表读数识别的两种方式
2021/01/14 Python
分享一个H5原生form表单的checkbox特效代码
2018/02/26 HTML / CSS
美国在线面料商店:Online Fabric Store
2018/07/26 全球购物
俄罗斯皮肤健康中心:Pharmacosmetica.ru
2020/02/22 全球购物
12岁生日感言
2014/01/21 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
技术支持岗位职责
2015/02/13 职场文书
行政前台岗位职责
2015/04/16 职场文书