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 相关文章推荐
10款最好的Web开发的 Python 框架
Mar 18 Python
Python 实现 贪吃蛇大作战 代码分享
Sep 07 Python
python strip() 函数和 split() 函数的详解及实例
Feb 03 Python
Python获取CPU、内存使用率以及网络使用状态代码
Feb 08 Python
VSCode下好用的Python插件及配置
Apr 06 Python
numpy实现合并多维矩阵、list的扩展方法
May 08 Python
python中从str中提取元素到list以及将list转换为str的方法
Jun 26 Python
python实现多层感知器
Jan 18 Python
python基于paramiko将文件上传到服务器代码实现
Jul 08 Python
Python导入数值型Excel数据并生成矩阵操作
Jun 09 Python
keras 多任务多loss实例
Jun 22 Python
用ldap作为django后端用户登录验证的实现
Dec 07 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+ajax无刷新分页实例详解
2015/12/07 PHP
PHP使用file_get_content设置头信息的方法
2016/02/14 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
2017/04/27 PHP
JavaScript表单常用验证集合
2008/01/16 Javascript
jquery文字上下滚动的实现方法
2013/03/22 Javascript
图片延迟加载的实现代码(模仿懒惰)
2013/03/29 Javascript
JavaScript sup方法入门实例(把字符串显示为上标)
2014/10/20 Javascript
jquery选择器需要注意的问题
2014/11/26 Javascript
详解JavaScript的表达式与运算符
2015/11/30 Javascript
学习使用AngularJS文件上传控件
2016/02/16 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
String字符串截取的四种方式总结
2016/11/28 Javascript
jquery实现下拉菜单的手风琴效果
2017/07/23 jQuery
Vue 中使用 CSS Modules优雅方法
2018/04/09 Javascript
解决vue admin element noCache设置无效的问题
2019/11/12 Javascript
解决vue路由name同名,路由重复的问题
2020/08/05 Javascript
[03:42]2014DOTA2西雅图国际邀请赛7月9日TOPPLAY
2014/07/09 DOTA
[01:48]DOTA2 2015国际邀请赛中国区预选赛第二日战报
2015/05/27 DOTA
跟老齐学Python之list和str比较
2014/09/20 Python
python topN 取最大的N个数或最小的N个数方法
2018/06/04 Python
用Python解决x的n次方问题
2019/02/08 Python
使用python写一个自动浏览文章的脚本实例
2019/12/05 Python
Python使用pymysql模块操作mysql增删改查实例分析
2019/12/19 Python
python 实现Flask中返回图片流给前端展示
2020/01/09 Python
万户网络JAVA程序员岗位招聘笔试试卷
2013/01/08 面试题
销售员试用期自我评价
2014/09/15 职场文书
优秀员工事迹材料
2014/12/20 职场文书
教师个人师德总结
2015/02/06 职场文书
大学生党员自我评价
2015/03/04 职场文书
物业工程部经理岗位职责
2015/04/09 职场文书
病危通知单
2015/04/17 职场文书
会计试用期工作总结2015
2015/05/28 职场文书
罗马假日观后感
2015/06/08 职场文书
放飞理想主题班会
2015/08/14 职场文书
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
2022/02/12 Redis
TV动画《八十龟酱观察日记》第四季宣传PV公布
2022/04/06 日漫