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

Cookie和Session

  • 前言cookie 和 session 得由来CookieCookie 属性Cookie 创建Cookie 分类SessionSession 工作原理创建 Session保存 Session销毁 Session检查Session 是否失效总结 Cookie Session相同点:不同点:工作流程:
私信小编01即可获取大量Python学习资料
前言最近总是有一些初学爬虫的小伙伴总是搞不懂 Session 和 Cookie 到底是做什么的 , 为什么爬虫访问网页的时候都用 Session 去访问 , 为什么 headers 携带 Cookie 就可以以登陆形式进入网页了 , 这两个东西的原理究竟是什么呢?
cookie 和 session 的由来在Web发展史中 , 我们知道浏览器与服务器间采用的是简单的 http 协议 , 而这种协议是‘无状态’的 , 所以这就导致了服务器无法知道是谁在浏览网页 , 但很明显 , 一些网页需要知道用户的状态 , 例如登陆 , 购物车等 。 所以为了解决这一问题 , 先后出现了四种技术 , 分别是 隐藏表单域, URL重写, Cookie, Session, 当然现阶段用的最多的技术自然是 Cookie 和 Session 了 。
CookieCookie 是浏览器保存到用户电脑上面的一个文本 , 简单来说就是当一个用户通过 http 请求访问到服务器端的时候 , 服务器会将一些字典的键值对返回给客户端浏览器 , 并给这些数据加上一些限制条件 , 在条件符合时这个用户下次访问这个服务器时 , 数据通过请求头又被完整地给带回服务器 , 服务器根据这些信息来判断不同的用户 。 简单来说 , Cookie 是服务器传输给客户端并保存到客户端的一段文本信息 ,Cookie 是有大小和数量限制的 。
Cookie 属性【Python爬虫必须掌握的概念—Cookie和Session】当我们访问网页的时候 , 我们看到网站的请求头如果携带 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 GMTSet-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 放在请求头中传给服务器 。
SessionCookie 是有大小限制和数量限制的 , 并且越来越多的 Cookie 代表客户端和服务器的传输量增加 , 可不可以每次传的时候不传所有 Cookie 值 , 而只传一个唯一ID , 通过这个ID直接在服务器查找用户信息呢?答案是有的 , 这就是我们的 Session 。 Session 是基于 Cookie 来工作的 , 同一个客户端每次访问服务器时 , 只要当浏览器在第一次访问服务器时 , 服务器设置一个id并保存一些信息(例如登陆就保存用户信息 , 视具体情况) , 并把这个id通过 Cookie 存到客户端 , 客户端每次和服务器交互时只传这个id , 就可以实现维持浏览器和服务器的状态 , 而这个ID通常是 NAME 为 JSESSIONID 的一个 Cookie 。 现阶段一共有四种方法让 Session 工作:
  • 通过URL传递SessionID
  • 通过Cookie传递SessionID
  • 通过SSL传递SessionID
  • 通过隐藏表单传递SessionID
Session 工作原理
Python爬虫必须掌握的概念—Cookie和Session文章插图