一、cookie & session

  1、cookie:

    cookie 就是由服务器发送给客户端的特殊信息,而这些信息以文本的方式存放在客户端,然后客户端每次向服务器发送请求都会带上这些特殊信息。让服务器来识别你的计算机。例如:你访问某些网站的时候,一些网站登录界面问是否保存密码,如果你选择保存后再登录,那么下次访问网站的时候就不许重复登录动作了,这就是Cookie实现的。

  cookie缺点:

    ① cookie数量和长度限制,每个domain最多只能有20条cookie,并且每个cookie长度不能超过4k

    ② 安全性问题,如果cookie被人拦截,那个人就能拿到session信息

    ③ 有些状态无法保存在客户端

    虽然cookie有这些缺点,但是cookie能够很好的做身份识别。

  2、session:

    session称为“会话控制”,session对象存储特定用户会话所需的属性及配置信息。当用户在Web页跳转时,存储在session对象中的变量不会丢失。

    session和cookie区别:

      ① cookie数据存储在客户的浏览器上,session数据放在服务器上

      ② cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session

      ③ session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie

      ④ 单个cookie保存的数据不能超过4k,很多浏览器都限制一个站点最多保存20个cookie

      ⑤ 登录信息等重要信息存放为session,某些需要保留的信息放在cookie

二、手动使用cookie登录

  比较傻的方法:直接复制cookie,手动放入请求头

 from urllib import request
if __name__ =="__main__":
# 模拟登录人人个人主页
url = "http://www.renren.com/967981984/profile"
headers={
"cookie":"anonymid=jlxrqipq-yd1b41; depovince=BJ; _r01_=1; JSESSIONID=abcrdbDitjgodcWbI_kxw; ick_login=666ef91c-38c0-4863-b69f-bd9b48f23b6a; t=ab090cc8a1b9e5a93991f467cf8f3eab4; societyguester=ab090cc8a1b9e5a93991f467cf8f3eab4; id=967981984; xnsid=3505b17e; jebecookies=e7f4d1cc-1fd5-4e3d-82e2-57fc6f652835|||||; ver=7.0; loginfrom=null; wp_fold=0; jebe_key=7da3f557-b4af-410d-b7c8-07ef5c61cd3a%7C873bc0529825e88a727db5146c0adb40%7C1536708771061%7C1"
}
req = request.Request(url, headers = headers)
res = request.urlopen(req)
html = res.read().decode()
# 把页面保存到本地
with open("res.html", "w") as f:
f.write(html)

三、使用cookie自动登录

  http模块中有一些cookie模块,通过他们我们可以自动使用cookie

  1、CookieJar

    - 管理存储cookie,向传出的http请求添加cookie

    - cookie存储在内存中,CookJar实例回收后cookie将消失

  2、FileCookieJar(filename, delayload = None, policy = None)

    - 使用文件管理cookie

    - filename是保存的文件的名字

  3、MozillaCookieJar(filename, delayload = None, policy = None)

    - 创建与mocilla(火狐)浏览器cookie.txt兼容的FileCookieJar

  4、LwpCookieJar(filename, delayload = None, policy = None)

    - 创建与LwpCookieJar标准兼容的Set-Cookie3格式的FileCookieJar

  关系 CookieJar -> FileCookieJar -> MozillaCookieJar -> LwpCookieJar

  利用cookieJar访问人人

  代码实现流程:  

    1、打开登录页面自动通过账号和密码

    2、自动提取反馈回来的cookie

    3、利用提取的cookie登录隐私页面

 from urllib import request,parse
from http import cookiejar
# 创建cookiejar实例
cookie = cookiejar.Cookiejar()
# 生成cookiejar管理器
cookie_handler = request.HTTPCookieProcessor(cookie)
# 创建http管理器
http_handler = request.HTTPHandler()
# 创建https管理器
https_handler = request.HTTPSHandler()
# 创建请求管理器
opener = request.build_opener(http_handler, https_handler, cookie_handler) # 登录函数
def login():
'''
负责初次登录
需要输入用户名、密码来获取登录cookie的凭证
'''
# 通过抓包获取的登录页面
url = "http://www.renren.com/PLogin.do"
# email 是登录账号 password是登录密码
data = {
"email":"",
"password":""
}
data = parse.urlencode(data)
req = request.Request(url, data = data.encode())
rsq = opener.open(req)
def getHomePage():
url = "http://www.renren.com/967981984/profile"
# 如果已经执行了Login函数,则opener自动包含相应的cookie值
rsp = opener.open(url)
html = rsp.read().decode()
with open("rsp.html", "w") as f:
f.write(html)
if __name__ =='__main__':
login()
getHomePage()

四、cookie属性

  使用代码查看cookie属性

from urllib import request,parse
from http import cookiejar
cookie = cookiejar.CookieJar()
cookie_handler = request.HTTPCookieProcessor(cookie)
http_handler = request.HTTPHandler()
https_handler = request.HTTPSHandler()
opener = request.build_opener(http_handler, https_handler, cookie_handler) def login():
url = "http://www.renren.com/PLogin.do"
data = {
"email":""
"password":""
}
data = parse.urlencode(data)
req = request.Request(url, data= data.encode())
rsp = opner.open(req) if __name__ == "__main__":
login()
print(cookie)
for item in cookie:
print(item)

执行结果:

  cookie属性

    - name:名称

    - value:值

    - domain:可以访问此cookie域名

    - path:可以访问cookie的页面路径

    - expire:过期时间

    - size:大小

    - http:字段

四、文件保存FileCookieJar

 from urllib import request, parse
from http import cookiejar
#创建cookie文件
filename = "cookie.txt"
# 创建MOzillacookiejar实例
cookie = cookiejar.MozillaCookieJar(filename)
# 生成cookiejar管理器
cookie_handler = request.HTTPCookieProcessor(cookie)
# http管理器
http_handler = request.HTTPHandler()
# https管理器
https_handler = request.HTTPSHandler()
# opener管理器
opener = request.bulid_opener(http_handler, https_landler, cookie_handler) def login():
url = "http://www.renren.com/PLogin.do"
data = {
"email": "",
"password": ""
}
data = parse.urlencode(data)
req = request.Request(url, data = data.encode())
res = opener.open(req)
cookie.save(ignore_discard=True, ignore_expires=True)
if __name__ =='__main__':
login()

  第27行可以直接cookie.save()不带参数

  ignore_discard=True  :将要丢弃cookie的也保存

  ignore_expires=True : 如果文件中的cookie已过期,继续保存

  

python学习笔记(3)---cookie & session的更多相关文章

  1. Python Web学习笔记之Cookie,Session,Token区别

    一.Cookie,Session,Token简介 # 这三者都解决了HTTP协议无状态的问题 session ID or session token is a piece of data that i ...

  2. node学习笔记9——cookie,session相关操作

    下面讲的都是基Express及相关的包.所以在实践本篇文章之前,通过npm安装好Express, cookie-parser, cookie-session这三个安装包. 先简单说一下,如何用Expr ...

  3. Javaweb学习笔记5—Cookie&Session

    今天来讲javaweb的第五阶段学习. Cookie和Session同样是web开发常用到的地方. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思维是用的xMind画的,如果你对我的 ...

  4. python学习笔记目录

    人生苦短,我学python学习笔记目录: week1 python入门week2 python基础week3 python进阶week4 python模块week5 python高阶week6 数据结 ...

  5. openresty 学习笔记六:使用session库

    openresty 学习笔记六:使用session库 lua-resty-session 是一个面向 OpenResty 的安全和灵活的 session 库,它实现了 Secure Cookie Pr ...

  6. python学习笔记整理——字典

    python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...

  7. VS2013中Python学习笔记[Django Web的第一个网页]

    前言 前面我简单介绍了Python的Hello World.看到有人问我搞搞Python的Web,一时兴起,就来试试看. 第一篇 VS2013中Python学习笔记[环境搭建] 简单介绍Python环 ...

  8. python学习笔记之module && package

    个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...

  9. python学习笔记(六)文件夹遍历,异常处理

    python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...

  10. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

随机推荐

  1. Javascript之深入理解闭包

    闭包算是js里面比较不容易理解的点,尤其是对于没有编程基础的人来说. 其实闭包要注意的就那么几条,如果你都明白了那么征服它并不是什么难事儿.下面就让我们来谈一谈闭包的一些基本原理. 闭包的概念 一个闭 ...

  2. python SQLAchemy常用语法

    SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果. ...

  3. python numpy+mkl+scipy win64 安装

    用pip在windows下安装numpy,scipy等库时一般来说都不会很顺利比较好的方式是自己下载对应的whl文件pip install 话不多说上链接 http://www.lfd.uci.edu ...

  4. [翻译] Macros with a Variable Number of Arguments - GCC

    可变参数宏(Variadic Macro) 在1999年的ISO C标准中,可以声明一个像函数一样接受可变参数的宏.定义这种宏的语法与函数的定义相似.这是一个例子: #define debug(for ...

  5. 颜色矩原理及Python实现

    原理 颜色矩(color moments)是由Stricker 和Orengo所提出的一种非常简单而有效的颜色特征.这种方法的数学基础在于图像中任何的颜色分布均可以用它的矩来表示.此外,由于颜色分布信 ...

  6. 针对XX系统的可用性方面的相关想法(结合书)

    在开始对此系统进行再次分析之前,再回顾下可用性.首先,可用性是与系统故障有关的一个质量属性,是指系统正常运行的时间的比例,一般通过两次故障之间的时间长度或在系统崩溃情况下能恢复正常运行的速度来衡量,同 ...

  7. 信用卡精养卡POS机方案

    所谓的精养卡,就是模仿有钱人的一种方式,提额难吗!真心不难,难就难在养卡消费 ,信用卡都有,但是不同费率的POS机你有吗,没有POS机难道你真的要去花费去消费吗,你消费的起吗?所以我们这个行业就出现了 ...

  8. javascript 同源策略及web安全

    同源策略为什么而生? JS可以读取/修改网页的值. 一个浏览器中,打开一个银行网站和一个恶意网站,如果恶意网站能够对银行网站进行修改,那么就会很危险. 你打开了恶意网站和另一个网站,如果没有同源限制, ...

  9. Ubuntu安装使用pyltp和StanfordCoreNLP

    环境:Ubuntu 16.04+anaconda3 一.pyltp 1. 安装 直接用pip安装: pip install pyltp 然后下载语言模型库,网址:https://pan.baidu.c ...

  10. QT样式

    最近在写QT的UI 分享一个助手网页 http://doc.qt.io/qt-4.8/stylesheet-examples.html