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使用xmlrpc实例讲解
Dec 17 Python
Python中用memcached来减少数据库查询次数的教程
Apr 07 Python
使用Protocol Buffers的C语言拓展提速Python程序的示例
Apr 16 Python
深入解析Python中的lambda表达式的用法
Aug 28 Python
Python算法应用实战之栈详解
Feb 04 Python
Python之用户输入的实例
Jun 22 Python
在dataframe两列日期相减并且得到具体的月数实例
Jul 03 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
Jun 19 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
Apr 22 Python
Python新手如何进行闭包时绑定变量操作
May 29 Python
如何理解Python中的变量
Jun 01 Python
Python celery原理及运行流程解析
Jun 13 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
Optimizer与Debugger兼容性问题的解决方法
2008/12/01 PHP
解析posix与perl标准的正则表达式区别
2013/06/17 PHP
如何使用FireFox插件FirePHP调试PHP
2013/07/23 PHP
php分页代码学习示例分享
2014/02/20 PHP
php生成随机颜色的方法
2014/11/13 PHP
教你在header中隐藏php的版本信息
2016/08/10 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
激活 ActiveX 控件
2006/10/09 Javascript
jquery自定义属性(类型/属性值)
2013/05/21 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
2013/12/29 Javascript
jquery.map()方法的使用详解
2015/07/09 Javascript
javascript的 {} 语句块详解
2016/02/27 Javascript
js判断手机系统是android还是ios
2017/03/07 Javascript
Bootstrap栅格系统使用方法及页面调整变形的解决方法
2017/03/10 Javascript
Javascript中字符串相关常用的使用方法总结
2017/03/13 Javascript
Swiper 4.x 使用方法(移动端网站的内容触摸滑动)
2018/05/17 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
2018/10/01 Javascript
elementUI select组件value值注意事项详解
2019/05/29 Javascript
layui监听工具栏的实例(操作列表按钮)
2019/09/10 Javascript
[01:01:14]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第一场 11.21
2020/11/23 DOTA
Python实现求最大公约数及判断素数的方法
2015/05/26 Python
Python算法应用实战之队列详解
2017/02/04 Python
大家都说好用的Python命令行库click的使用
2019/11/07 Python
django执行数据库查询之后实现返回的结果集转json
2020/03/31 Python
最新pycharm安装教程
2020/11/18 Python
详解canvas在圆弧周围绘制文本的两种写法
2018/05/22 HTML / CSS
利用HTML5实现使用按钮控制背景音乐开关
2015/09/21 HTML / CSS
如何写好升职自荐信
2014/01/06 职场文书
园林系毕业生求职信
2014/06/23 职场文书
2014年单位工作总结范文
2014/11/27 职场文书
2014年建筑工程工作总结
2014/12/03 职场文书
个人政治思想总结
2015/03/05 职场文书
房地产置业顾问工作总结
2015/10/23 职场文书
Java中PriorityQueue实现最小堆和最大堆的用法
2021/06/27 Java/Android
Python实现为PDF去除水印的示例代码
2022/04/03 Python
java如何实现获取客户端ip地址的示例代码
2022/04/07 Java/Android