专栏名称: 极客挖掘机
高级软件工程师
目录
相关文章推荐
南京日报  ·  场面惊险!黄山风景区紧急公告 ·  4 小时前  
岚山发布  ·  起猛了!一夜之间,岚山变“花海”! ·  2 天前  
岚山发布  ·  起猛了!一夜之间,岚山变“花海”! ·  2 天前  
北京大学中国古代史研究中心  ·  中古史荐读|童强:从士族到进士——古代艺术家 ... ·  2 天前  
史事挖掘机  ·  1979年河南教师平整土地,挖出九千年前国宝 ... ·  3 天前  
51好读  ›  专栏  ›  极客挖掘机

小白学 Python 爬虫(10):Session 和 Cookies

极客挖掘机  · 掘金  ·  · 2019-12-04 08:57

正文

阅读 99

小白学 Python 爬虫(10):Session 和 Cookies

人生苦短,我用 Python

前文传送门:

小白学 Python 爬虫(1):开篇

小白学 Python 爬虫(2):前置准备(一)基本类库的安装

小白学 Python 爬虫(3):前置准备(二)Linux基础入门

小白学 Python 爬虫(4):前置准备(三)Docker基础入门

小白学 Python 爬虫(5):前置准备(四)数据库基础

小白学 Python 爬虫(6):前置准备(五)爬虫框架的安装

小白学 Python 爬虫(7):HTTP 基础

小白学 Python 爬虫(8):网页基础

小白学 Python 爬虫(9):爬虫基础

引言

先说一个题外话,今天老司机翻车了,内容小编今天来不及写了,后面会整理下,分享给大家。

在介绍 Session 和 Cookies 之前,先介绍一个另外的概念 —— 静态网页和动态网页。

静态网页

静态网页就是我们上一篇写的那种 html 页面,后缀为 .html 的这种文件,直接部署到或者是放到某个 web 容器上,就可以在浏览器通过链接直接访问到了,常用的 web 容器有 Nginx 、 Apache 、 Tomcat 、Weblogic 、 Jboss 、 Resin 等等,很多很多。

如果说要举例子的话那么小编的个人博客站:https://www.geekdigging.com/ 就是一个纯粹的静态网页。

这种网页的内容是通过纯粹的 HTML 代码来书写,包括一些资源文件:图片、视频等内容的引入都是使用 HTML 标签来完成的。

它的好处当然是加载速度快,编写简单,访问的时候对 web 容器基本上不会产生什么压力。但是缺点也很明显,可维护性比较差,不能根据参数动态的显示内容等等。

有需求就会有发展么,这时动态网页就应运而生了。

动态网页

我们先不说动态网页的概念,先说说有哪些网站是由动态网页来构建的。大家常用的某宝、某东、拼夕夕等网站都是由动态网页组成的。

动态网页可以解析 URL 中的参数,或者是关联数据库中的数据,显示不同的网页内容。

现在各位同学访问的网站大多数都是动态网站,它们不再简简单单是由 HTML 堆砌而成,可能是由 JSP 、 PHP 等语言编写的,当然,现在很多由前端框架编写而成的网页小编这里也归属为动态网页。

说到动态网页,各位同学可能使用频率最高的一个功能是登录,像各种电商类网站,肯定是登录了以后才能下单买东西。那么,问题来了,后面的服务端是如何知道当前这个人已经登录了呢?

HTTP/1.1

现在大多数的网站使用的协议都是 HTTP/1.1 ,而 HTTP/1.1 最大的特点就是无状态、无连接的。

无状态就是指 HTTP 协议对于请求的发送处理是没有记忆功能的,也就是说每次 HTTP 请求到达服务端,服务端都不知道当前的客户端(浏览器)到底是一个什么状态。客户端向服务端发送请求后,服务端处理这个请求,然后将内容响应回客户端,完成一次交互,这个过程是完全相互独立的,服务端不会记录前后的状态变化,也就是缺少状态记录。

这就产生了上面的问题,服务端如何知道当前在浏览器面前操作的这个人是谁?

其实,在用户做登录操作的时候,服务端会下发一个类似于 token 凭证的东西返回至客户端(浏览器),有了这个凭证,才能保持登录状态。

那么这个凭证是什么?

这就是本篇文章要解释的核心内容,Session 和 Cookies 了。

Session 是会话的意思,会话是产生在服务端的,用来保存当前用户的会话信息,而 Cookies 是保存在客户端(浏览器),有了 Cookie 以后,客户端(浏览器)再次访问服务端的时候,会将这个 Cookie 带上,这时,服务端可以通过 Cookie 来识别本次请求到底是谁在访问。

可以简单理解为 Cookies 中保存了登录凭证,我们只要持有这个凭证,就可以在服务端保持一个登录状态。

在爬虫中,有时候遇到需要登录才能访问的网页,只需要在登录后获取了 Cookies ,在下次访问的时候将登录后获取到的 Cookies 放在请求头中,这时,服务端就会认为我们的爬虫是一个正常登录用户。

Session 保持

那么,Cookies 是如何保持会话状态的呢?

在客户端(浏览器)第一次请求服务端的时候,服务端会返回一个请求头中带有 Set-Cookie 字段的响应给客户端(浏览器),用来标记是哪一个用户,客户端(浏览器)会把这个 Cookies 给保存起来。

我们来使用工具 PostMan 来访问下某东的登录页,看下返回的响应头:

当我们输入好用户名和密码时,客户端会将这个 Cookies 放在请求头一起发送给服务端,这时,服务端就知道是谁在进行登录操作,并且可以判断这个人输入的用户名和密码对不对,如果输入正确,则在服务端的 Session 记录一下这个人已经登录成功了,下次再请求的时候这个人就是登录状态了。

如果客户端传给服务端的 Cookies 是无效的,或者这个 Cookies 根本不是由这个服务端下发的,或者这个 Cookies 已经过期了,那么接下里的请求将不再能访问需要登录后才能访问的页面。

所以, Session 和 Cookies 之间是需要相互配合的,一个在服务端,一个在客户端。

Cookies

我们还是打开某东的网站,看下这些 Cookies到底有哪些内容:

具体操作方式还是在 Chrome 中按 F12 打开开发者工具,选择 Application 标签,点开 Cookies 这一栏。







请到「今天看啥」查看全文