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 列表list使用介绍
Nov 30 Python
在Python的Flask框架中实现单元测试的教程
Apr 20 Python
Python2.x版本中基本的中文编码问题解决
Oct 12 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
Nov 01 Python
python如何把嵌套列表转变成普通列表
Mar 20 Python
浅析PHP与Python进行数据交互
May 15 Python
python构建基础的爬虫教学
Dec 23 Python
解析Python的缩进规则的使用
Jan 16 Python
python机器学习实现决策树
Nov 11 Python
python实现最速下降法
Mar 24 Python
python中upper是做什么用的
Jul 20 Python
python时间序列数据转为timestamp格式的方法
Aug 03 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
Yii入门教程之目录结构、入口文件及路由设置
2014/11/25 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
Yii数据读取与跳转参数传递用法实例分析
2016/07/12 PHP
PHP入门教程之面向对象基本概念实例分析
2016/09/11 PHP
浅谈javascript 面向对象编程
2009/10/28 Javascript
js String对象中常用方法小结(字符串操作)
2012/01/27 Javascript
jquery.post用法关于type设置问题补充
2014/01/03 Javascript
jQuery实现文件上传进度条特效
2015/08/12 Javascript
微信小程序 引用其他js文件实现代码
2017/02/22 Javascript
Nodejs中crypto模块的安全知识讲解
2018/01/03 NodeJs
r.js来合并压缩css文件的示例
2018/04/26 Javascript
layui radio性别单选框赋值方法
2018/08/15 Javascript
基于layui数据表格以及传数据的方式
2018/08/19 Javascript
详解如何解决Vue和vue-template-compiler版本之间的问题
2018/09/17 Javascript
怎样在vue项目下添加ESLint的方法
2019/05/16 Javascript
Javascript三种字符串连接方式及性能比较
2019/05/28 Javascript
vue实现行列转换的一种方法
2019/08/06 Javascript
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
浅谈Layui的eleTree树式选择器使用方法
2019/09/25 Javascript
[57:55]EG vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python简单分割文件的方法
2015/07/30 Python
Python如何实现守护进程的方法示例
2017/02/08 Python
使用Python制作自动推送微信消息提醒的备忘录功能
2018/09/06 Python
对Python 简单串口收发GUI界面的实例详解
2019/06/12 Python
如何利用Python模拟GitHub登录详解
2019/07/15 Python
导入tensorflow时报错:cannot import name 'abs'的解决
2019/10/10 Python
Python实现word2Vec model过程解析
2019/12/16 Python
Python scrapy增量爬取实例及实现过程解析
2019/12/24 Python
HTML5中的Web Notification桌面通知功能的实现方法
2019/07/29 HTML / CSS
税务会计岗位职责
2014/02/18 职场文书
学校安全防火方案
2014/06/07 职场文书
辩论赛开场白大全(主持人+辩手)
2015/05/29 职场文书
高一化学教学反思
2016/02/22 职场文书
详解MySQL连接挂死的原因
2021/05/18 MySQL
pytorch通过训练结果的复现设置随机种子
2021/06/01 Python
浅谈Python数学建模之数据导入
2021/06/23 Python