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输出指定月份日历的方法
Apr 23 Python
python开发简易版在线音乐播放器
Mar 03 Python
python如何通过twisted实现数据库异步插入
Mar 20 Python
Pipenv一键搭建python虚拟环境的方法
May 22 Python
python re正则匹配网页中图片url地址的方法
Dec 20 Python
把pandas转换int型为str型的方法
Jan 29 Python
解决python写入带有中文的字符到文件错误的问题
Jan 31 Python
python爬虫爬取笔趣网小说网站过程图解
Nov 18 Python
python django中8000端口被占用的解决
Dec 17 Python
python如何通过闭包实现计算器的功能
Feb 22 Python
PythonPC客户端自动化实现原理(pywinauto)
May 28 Python
Pyinstaller加密打包应用的示例代码
Jun 11 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一维二维数组键排序方法实例总结
2014/11/13 PHP
php格式化json函数示例代码
2016/05/12 PHP
PHP简单字符串过滤方法示例
2016/09/04 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
tp5框架无刷新分页实现方法分析
2019/09/26 PHP
Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
2019/10/11 PHP
jquery Firefox3.5中操作select的问题
2009/07/10 Javascript
JQuery实现的在新窗口打开链接的方法小结
2010/04/22 Javascript
JavaScript 错误处理与调试经验总结
2010/08/10 Javascript
往光标所在位置插入值的js代码
2013/09/22 Javascript
node.js中的querystring.parse方法使用说明
2014/12/10 Javascript
详解Bootstrap各式各样的按钮(推荐)
2016/12/13 Javascript
ES6学习教程之模板字符串详解
2017/10/09 Javascript
微信小程序实现获取小程序码和二维码java接口开发
2019/03/29 Javascript
JS Ajax请求会话过期处理问题解决方法分析
2019/11/16 Javascript
JSONObject与JSONArray使用方法解析
2020/09/28 Javascript
[01:36:57]【09DOTA2第一视角】小骷髅
2014/04/16 DOTA
Python深入学习之对象的属性
2014/08/31 Python
在Django的上下文中设置变量的方法
2015/07/20 Python
numpy找出array中的最大值,最小值实例
2018/04/03 Python
python 判断网络连通的实现方法
2018/04/22 Python
python opencv读mp4视频的实例
2018/12/07 Python
windows下python虚拟环境virtualenv安装和使用详解
2019/07/16 Python
Python提取PDF内容的方法(文本、图像、线条等)
2019/09/25 Python
Python pandas库中的isnull()详解
2019/12/26 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
2020/04/14 Python
Django nginx配置实现过程详解
2020/09/10 Python
一款超酷的js+css3实现的3D标签云特效兼容ie7/8/9
2013/11/18 HTML / CSS
护理专科自荐书范文
2014/02/18 职场文书
运动会广播稿200字
2014/10/18 职场文书
晚会开幕词
2015/01/28 职场文书
大学毕业典礼致辞
2015/07/29 职场文书
大学自主招生自荐信(2016精选篇)
2016/01/28 职场文书
资产移交协议书
2016/03/24 职场文书
《西游记》读后感(3篇)
2019/09/20 职场文书
SqlServer常用函数及时间处理小结
2023/05/08 SQL Server