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的web框架编写前端模版的教程
Apr 30 Python
浅谈Python黑帽子取代netcat
Feb 10 Python
python书籍信息爬虫实例
Mar 19 Python
python实现决策树分类(2)
Aug 30 Python
python实现大转盘抽奖效果
Jan 22 Python
Python OpenCV利用笔记本摄像头实现人脸检测
Aug 20 Python
python使用PIL和matplotlib获取图片像素点并合并解析
Sep 10 Python
python 和c++实现旋转矩阵到欧拉角的变换方式
Dec 04 Python
python实现简单日志记录库glog的使用
Dec 13 Python
Django静态资源部署404问题解决方案
May 11 Python
python能否java成为主流语言吗
Jun 22 Python
浅析关于Keras的安装(pycharm)和初步理解
Oct 23 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 中dirname(_file_)讲解
2007/03/18 PHP
PHP GD 图像处理组件的常用函数总结
2010/04/28 PHP
php实现将上传word文件转为html的方法
2015/06/03 PHP
CodeIgniter配置之SESSION用法实例分析
2016/01/19 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
JavaScript 全角转半角部分
2009/10/28 Javascript
jQuery第三课 修改元素属性及内容的代码
2010/03/14 Javascript
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
ajax不执行success回调而是执行了error回调
2012/12/10 Javascript
一个JavaScript的求爱小特效
2014/05/09 Javascript
超级给力的JavaScript的React框架入门教程
2015/07/02 Javascript
jquery实现Ctrl+Enter提交表单的方法
2015/07/21 Javascript
Nodejs中 npm常用命令详解
2016/07/04 NodeJs
jQuery 插件实现随机自由弹跳气泡样式
2017/01/12 Javascript
基于vue的短信验证码倒计时demo
2017/09/13 Javascript
JS实现多物体运动的方法详解
2018/01/23 Javascript
JS实现指定区域的全屏显示功能示例
2019/04/25 Javascript
基于Vue的侧边目录组件的实现
2020/02/05 Javascript
[01:06:25]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
Python中文件操作简明介绍
2015/04/13 Python
python爬虫基本知识
2018/03/05 Python
Pandas 缺失数据处理的实现
2019/11/04 Python
如何使用python代码操作git代码
2020/02/29 Python
解决pycharm中的run和debug失效无法点击运行
2020/06/09 Python
通过实例简单了解python yield使用方法
2020/08/06 Python
python 如何停止一个死循环的线程
2020/11/24 Python
最经典的商业地产项目广告词
2014/03/13 职场文书
经典的毕业生自荐信范文
2014/04/14 职场文书
幼儿园大班家长评语
2014/04/17 职场文书
面试必备的求职信
2014/05/25 职场文书
啤酒节策划方案
2014/05/28 职场文书
运动会400米加油稿(8篇)
2014/09/22 职场文书
机关作风建设心得体会
2014/10/22 职场文书
二十年同学聚会感言
2015/07/30 职场文书
Nginx解决前端访问资源跨域问题的方法详解
2021/03/31 Servers