Python爬虫必须掌握的概念—Cookie和Session

一篇万字博文带你入坑爬虫这条不归路 【万字图文】 阅读详情

Cookie和Session

很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!??¤
QQ群:623406465

前言

最近总是有一些初学爬虫的小伙伴总是搞不懂 Session 和 Cookie 到底是做什么的,为什么爬虫访问网页的时候都用 Session 去访问,为什么 headers 携带 Cookie 就可以以登陆形式进入网页了,这两个东西的原理究竟是什么呢?


cookie 和 session 的由来

在Web发展史中,我们知道浏览器与服务器间采用的是简单的 http 协议,而这种协议是‘无状态’的,所以这就导致了服务器无法知道是谁在浏览网页,但很明显,一些网页需要知道用户的状态,例如登陆,购物车等。
所以为了解决这一问题,先后出现了四种技术,分别是 隐藏表单域 ,URL重写 ,Cookie ,Session ,当然现阶段用的最多的技术自然是 Cookie 和 Session 了。


Cookie

Cookie 是浏览器保存到用户电脑上面的一个文本,简单来说就是当一个用户通过 http 请求访问到服务器端的时候,服务器会将一些字典的键值对返回给客户端浏览器,并给这些数据加上一些限制条件,在条件符合时这个用户下次访问这个服务器时,数据通过请求头又被完整地给带回服务器,服务器根据这些信息来判断不同的用户。
简单来说,Cookie 是服务器传输给客户端并保存到客户端的一段文本信息, Cookie 是有大小和数量限制的。

Cookie 属性

当我们访问网页的时候,我们看到网站的请求头如果携带 Cookie 都会含有 Set-Cookie 的属性,在这里分析一下 Set-Cookie 都包含什么属性项:

属性项属性项介绍
Name=VALUE键值对,可以设置保存的键值对属性,这里的NAME不能和其他属性的名字相同
Expires过期时间,这个时间后Cookie便会失效
Domain生成Cookie的域名空间
Path这个Cookie在系统哪个文件路径下生成的
Secure加密设置,设置之后只能在SSH连接环境下才能回传这个Cookie属性

在这里仔细介绍一下 Domain 究竟是做什么的。
现在假设有两个域名:

域名A:a.qq.com.cn
域名B:b.qq.com.cn

显然域名A和域名B都是qq.com.cn的子域名。

  • 如果我们在域名A中的 Cookie 的 domain 设置为 qq.com.cn ,那么 qq.com.cn 及其子域名都可以获取这个 Cookie,即域名A和域名B都可以获取这个 Cookie。
  • 如果域名A和域名B同时设置 Cookie 的 doamin 为 qq.com.cn,那么将出现覆盖的现象。
  • 如果域名A没有显式设置 Cookie 的 domain 方法,那么 domain 就为 a.qq.com.cn,不一样的是,这时,域名A的子域名将无法获取这个 Cookie。

Cookie 创建

Set-Cookie: value[; expires=date][; domain=domain][; path=path][; secure]

Set-Cookie:delPer=0; expires=Thu, 16-Aug-2050 12:15:40 GMT
Set-Cookie:BDSVRTM=0; path=/
Set-Cookie:BD_HOME=0; path=/
Set-Cookie:H_PS_PSSID=1462_21106_26925_22074; path=/; domain=.baidu.com

构建http返回字节流时是将 Header 中所有的项顺序写出,而没有进行任何修改。所以浏览器在接收 http 返回的数据时是分别解析每一个 Header 项。

Cookie 分类

  • 会话级别 Cookie:所谓会话级别 Cookie,就是在浏览器关闭之后 Cookie 就会失效。
  • 持久级别 Cookie:保存在硬盘的 Cookie,只要设置了过期时间就是硬盘级别 Cookie。

现在 Cookie 保存在了客户端,当我们去请求一个URL时,浏览器会根据这个URL路径将符合条件的 Cookie 放在请求头中传给服务器。


Session

Cookie 是有大小限制和数量限制的,并且越来越多的 Cookie 代表客户端和服务器的传输量增加,可不可以每次传的时候不传所有 Cookie 值,而只传一个唯一ID,通过这个ID直接在服务器查找用户信息呢?答案是有的,这就是我们的 Session。
Session 是基于 Cookie 来工作的,同一个客户端每次访问服务器时,只要当浏览器在第一次访问服务器时,服务器设置一个id并保存一些信息(例如登陆就保存用户信息,视具体情况),并把这个id通过 Cookie 存到客户端,客户端每次和服务器交互时只传这个id,就可以实现维持浏览器和服务器的状态,而这个ID通常是 NAME 为 JSESSIONID 的一个 Cookie。
现阶段一共有四种方法让 Session 工作:

  • 通过URL传递SessionID
  • 通过Cookie传递SessionID
  • 通过SSL传递SessionID
  • 通过隐藏表单传递SessionID

Session 工作原理

在这里插入图片描述

创建 Session

当客户端访问到服务器,服务器会为这个客户端通过 request.getSession() 方法创建一个 Session ,如果当前 SessionID 还没有对应的 HttpSession 对象,就创建一个新的,并添加到 org.apache.catalina.Manager 的 Sessions 容器中保存,这就做到了对状态的保持。当然,这个 SessionID 是唯一的

保存 Session

由图可知,Session 对象已经保存在了 Manager 类中,StandardManager 作为实现类,通过 requestedSessionId 从 StandardManager 的 Sessions 集合中取出 StandardSession 对象。

我们来看看 StandardManager 时如何对所有 StandardSession 对象进行生命周期管理

当 Servlet 容器关闭:StandardManager 将持久化没过期的 StandardSession 对象(必须调用 Servlet 容器中的 stop 和 start 命令,不能直接 kill)

当 Servlet 容器重启时:StandardManager 初始化会重读这个文件,解析出所有 session 对象。

销毁 Session

Session 的声明周期是从创建到超时过期。
也就是说,当 Session 创建后,浏览器关闭,会话级别的 Cookie 被销毁,如果没有超过设定时间,该 SessionID 对应的 Session 是没有被销毁的。

检查Session 是否失效

检查每个 Session 是否失效是在 Tomcat 的一个后台线程完成的( backgroundProcess() 方法中);除了后台进程检验 Session 是否失效外,调用 request.getSession() 也会检查该 Session 是否过期,当然,调用这种方法如果过期的话又会重新创建一个新的 Session。


总结 Cookie Session

相同点:

  • Session 和 Cookie 都是为了让 http 协议又状态而存在。
  • Session 通过 Cookie 工作,Cookie 传输的 SessionID 让 Session 知道这个客户端到底是谁。

不同点:

  • Session 将信息保存到服务器,Cookie 将信息保存在客户端。

工作流程:

当浏览器第一次访问服务器时,服务器创建 Session 并将 SessionID 通过 Cookie 带给浏览器保存在客户端,同时服务器根据业务逻辑保存相应的客户端信息保存在 Session 中;客户端再访问时上传 Cookie ,服务器得到 Cookie 后获取里面的 SessionID,来维持状态。

群晖设置公网ipv6方式域名解析访问 群晖、IPV6、域名解析 阅读详情

相关推荐

【从零开始学Skynet】实战篇《球球大作战》(一):功能设计

为了能把之前在基础篇中学习到的Skynet的各种知识结合起来,所以在实战篇中,我们准备开发一个完整的游戏案例《球球大作战》,介绍分布式游戏服务端的实现方法。

我是一条寻水的鱼 2979

爬虫前文----简化搞懂cookie和session

Cookie和Session前言cookie 和 session 的由来CookieCookie 属性Cookie 创建Cookie 分类SessionSession 工作原理创建 Session保存 Session销毁 Session检查Session 是否失效总结 Cookie Session相同点:不同点:工作流程: 前言 最近总是有一些初学爬虫的小伙伴总是搞不懂 Session 和 Cookie 到底是做什么的,为什么爬虫访问网页的时候都用 Session 去访问,为什么 headers 携带 C

一名新生程序员的日常 8243

Oracle OCP 19c 认证1Z0-083考试大纲(Oracle官方版)

Oracle Database: Managing Multitenant Architecture Ed 1 course

#真题在线# 1588

cookie、session、token

首先我们需要了解,HTTP是一个无状态协议。也就是说,这一次请求和上一次请求时没有任何关联的。这种无状态的好处是快速,缺点是我们想要不两次请求联系起来必须另外的手段或者工具了。 cookie和session 由于http的无状态性,为了使某个域名下的所有网页能够共享某些数据,session和cookie出现了。客户端访问服务器的流程如下: 首先,客户端会发送一个http请求到服务器端...

JohnZhongJob的博客 521

Matcap与菲涅尔

菲尼尔效果(简化版公式):fresnel = base + scale*((1-v*n)^power)透明队列为后前渲染,不关闭深度写入则会覆盖之前的像素,导致混合不了。y的值为0~1,根据x3返回对应y值。两色混合做个demo看看!混合为什么要关闭深度写入?

weixin_62773441的博客 372

学习心得——COMSOL Multiphysics with MATLAB联合仿真及寻优计算

学习心得——COMSOL Multiphysics with MATLAB联合仿真及寻优计算

weixin_41678956的博客 8658

爬虫基础—Session和Cookie

📋 个人简介 💖 作者简介:大家好,我是W_chuanqi,一个编程爱好者 📙 个人主页:W_chaunqi 😀 支持我:点赞👍+收藏⭐️+留言📝 💬 愿你我共勉:“若身在泥潭,心也在泥潭,则满眼望去均是泥潭;若身在泥潭,而心系鲲鹏,则能见九万里天地。”✨✨✨​ 在浏览网站的过程中,我们经常会遇到需要登录的情况,有些页面只有登录之后才可以访问。在登录之后可以连续访问很多次网站,但是有时候过一段时间就需要重新登录。还有一些网站,在打开浏览器时就自动登录了,而且在很长时间内都不会失效,这又是什...

W_chuanqi的博客 974

放弃FFT全频计算!在STM32F407上用DFT单点计算提速50%的优化技巧

本文详细介绍了在STM32F407上通过DFT单点计算实现比FFT快50%的优化技巧,特别适用于生物阻抗分析、振动监测等只需关注单一频点的嵌入式场景。通过预计算相位角、查表法和混合精度计算等策略,显著提升计算效率和内存利用率,同时保持高精度。

weixin_28738397的博客 194

HTTP详解

HTTP详解

qq_17496235的博客 2244

高缺失率时空数据插补实战:从随机森林到扩散模型的性能对比

数据缺失是数据分析与机器学习建模中普遍面临的挑战,尤其在时空数据领域,传感器故障、传输中断等问题常导致数据不完整。数据插补技术旨在基于已知数据的模式和关联性,合理估算缺失值,为后续分析提供可靠基础。其核心原理在于利用数据的时空相关性(如时间周期性、空间邻近性)及与外部驱动因素(如交通、气象)的关联构建预测模型。这项技术的价值在于能将不完整的数据集转化为可用于高质量分析和预测的可用资产,广泛应用于环境监测、交通流量预测、金融风控等领域。本文聚焦于一个极具挑战性的场景——PM2.5监测数据缺失率高达82%,通过

weixin_30363285的博客 544

详解AUTOSAR:专栏总述

本专栏系统介绍AUTOSAR规范及车用控制器软件开发,内容覆盖基础架构、SWC/RTE、通信栈、诊断、存储、安全、看门狗、工具链、环境配置与项目实战,并持续更新各模块的集成机制与工程要点。

不脱发的程序猿 3924

【日常】爬虫学习进阶:百度翻译的秘密(2021版)

偶尔爬爬虫还是有点意思的,权当消遣。

梦想破三的奔三狗 1万+

鸿蒙系统开发工程师:核心技术解析与深度面试指南

摘要: 鸿蒙系统开发工程师需具备底层驱动开发、系统移植优化及分布式架构能力。核心职责包括硬件适配(Bootloader、内核移植、HDF驱动开发)、性能调优(启动加速、功耗管理)及稳定性保障。技术要求涵盖C/C++编程、Linux内核机制、鸿蒙架构(HDF、分布式服务)及ArkTS/ArkUI基础。面试重点考察系统移植流程(如ARM板适配)、驱动开发(I2C/Display)、性能优化手段及内存/同步机制的应用。

郑伟强dev的专栏 430

【Python】Python3网络爬虫实战-18、Session和Cookies

在浏览网站的过程中我们经常会遇到需要登录的情况,有些页面只有登录之后我们才可以访问,而且登录之后可以连续访问很多次网站,但是有时候过一段时间就会需要重新登录。还有一些网站有时在我们打开浏览器的时候就自动登录了,而且很长的时间都不会失效,这种情况又是为什么?其实这里面涉及到 Session 和 Cookies 的相关知识,本节我们就来揭开它们的神秘面纱。 1. 静态网页和动态网页 在开始之前我们需要...

Python8年程序员教程分享 495

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Cookie、Session 和 Token:联系、区别与应用场景

Cookie、Session 和 Token 是 Web 开发和爬虫中常用的身份验证和状态管理机制。**Cookie** 存储在客户端,用于识别用户并保持会话;**Session** 将用户会话数据保存在服务器,通过 Session ID 识别用户;**Token** 是无状态认证,常用于 RESTful API,通过加密的令牌实现跨域认证。在爬虫中,Cookie 和 Token 常用于模拟登录,以访问需要身份验证的页面。文章演示如何获取和使用 Cookie 和 Token 进行爬虫操作。

qq_36545573的博客 1199

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

python客户端修改session_Python——网络爬虫、登录、代理设置

一、cookie和sesson1、什么是cookie和sessioncookie:cookie是网站用来辨别用户身份,进行会话跟踪,存储在本地终端上的数据。session:session(会话)本来含义是指有始有终的一系列动作和消息。在web中,session主要用来在服务器端存储特定用户对象会话所需要的信息。2、cookie和session产生的原因http协议是一个无状态协议,在特定操作的时候...

weixin_39798031的博客 471

Python网络爬虫设计(三)

在前面我们了解到,requests和pyppeteer各有利弊,requests的速度很快,但是如果面对登录等操作就比较麻烦(需要抓包),pyppeteer虽然可以比较简单的处理这种登录操作,但是他的速度很慢,所以我们就可以将二者结合,实现比较高效的代码。在众多种类的页面中,不同的页面有不同的功能,有的是进行展示的,而有的则是登录类的。,称为cookie,这样浏览器每次发送请求的时候,就会带上cookie,服务器就知道是之前那个登录过的用户的请求了。

2401_84944910的博客 1099

爬虫-requests库

代表重点 爬虫的基本概念 爬虫的定义 * · 网络爬虫,又称爬虫、网络蜘蛛或网络机器人。就是模拟客户端发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。 · 只要是浏览器能做的事情,原则上爬虫都能做。 爬虫的分类 * 通用爬虫:通常指搜索引擎的爬虫 流程:抓取网页–>数据存储–>预处理–>提供检索服务、网站排名(pagerank算法) 聚...

coo1的博客 277

爬虫之request模块高级

一、cookie&session cookie:服务器端使用cookie来记录客户端的状态信息 实现流程: 执行登陆操作(获取cookie) 在发起个人主页请求时,需要将cookie携带到该请求中 注意:session对象也可以发送请求,并且会将cookie对象进行自动存储 cookie&session演示 import requests sessi...

weixin_33921089的博客 85

python爬虫一:数据采集

文章目录爬虫简介简单爬虫小案例: 实现一个图片下载器网络数据采集之requests库(常用)小练习:使用get与post方法实现爬取反爬小技巧一: 添加 headers二:IP代理设置小练习:有道搜索关键词提交 爬虫简介 一、根据使用场景,网络爬虫可分为:通用爬虫 和 聚焦爬虫两种: 通用爬虫: 通用网络爬虫是捜索引擎抓取系统(Baidu、Google、Yahoo等)的重要组成部分; 主要...

qq_44241861的博客 815

python爬虫(一)基础知识

python爬虫(一)基础知识 数据的来源 用户生产的数据 政府用来统计的数据 数据管理公司中的数据 自己爬取的数据 数据的作用 数据分析 智能产品练习数据 make money 爬虫的概念 使用编程语言所编写的一个用于爬取web或app数据的应用程序 爬取数据的过程 找到要爬取的数据的网站,发起请求 分析url是如何变化的,提取有用的url 提取有用的数据 爬取数据数据要遵守robots.txt 协议 爬虫的分类 通用网络爬虫 如:百度,谷歌等搜索引擎,从一些初始的url扩展到整个网站,主要为

qq_42385761的博客 494

01 python 爬虫基础 (url request)

urllib是Python自带的标准库中用于网络请求的库,无需安装,直接引用即可通常用于爬虫开发、API(应用程序编程接口)数据获取和测试urllib库的4大模块urllib.request :用于打开和读取URLurllib.error:包含提出的例外(异常)urllib.requesturllib.parse:用于解析URLurllib.robotparser:用于解析robots.txt文件kw = {'wd':'马士兵'}# 编写# 解码print(res)

March_A的博客 816

爬虫学习5——requests进阶(cookie登录、防盗链、

cookies登录 登录之后会得到服务器返回的cookie,使用cookie请求我们需求的url页面 session用于保持登录信息,在这个过程中cookie信息不会丢失 session=requests.session() 方法一:在提出申请时指定cookie import requests resp=requests.get('https://user.17k.com/ck/author/shelf?page=1&appKey=2406394919',headers={'Cooki

qq_57099024的博客 433

通用爬虫模块使用(中)

一:requests发送POST请求 哪些时候我们会用到POST请求: 登陆注册(POST比GET更安全) 传输大文本内容(POST请求对数据长度没要求,GET有) POST请求用法: response = requests.post("https://www.baidu.com/", data=data, headers=headers) 以下是百度的示例: 二:requests使用代理 三:requests模拟登录的三种方式 四:寻找POST地址 五:寻找并分析js 六:requests的一些

eyes++的博客 391

python爬虫——cookie校验

python爬虫反爬机制之一——cookie校验,创建session对象并将发送请求产生的cookie储存其中,携带cookie进行访问,即可获得正确数据,本文以雪球网为例进行演示。

weixin_45691962的博客 869

python爬虫中Session 和 cookie的使用

在日常采集数据的过程中,我们经常会遇到有些页面只有登录之后我们才可以访问,并且在登录之后可以连续进行一系列操作,但是有些时候又需要重新进行登录。cookie的基本知识想必大家做爬虫的都很清楚,关于Session这里可以好好的解释下,Session最简单的理解就是会话,主要作用就是用来记录一个用户在目标网站上的一些行为、一些状态,而这些用户状态可以利用Cookie中的Session ID来标识。在访问某些网站的时候,是需要先进行登录才能进行下一步操作的。

Z_suger7的博客 1148

Python爬虫笔记(三)(1)cookie和session

什么是cookie 什么是session 产生的原因 cookie的原理 session的工作原理

hxlat的博客 279
上一篇: Python爬虫实战 --实现 QQ空间自动点赞
下一篇: Python爬虫入门基础及正则表达式抓取博客案例分享
Python_sn
博客等级 码龄6年 324粉丝 290原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值