沭阳学爬虫04Session 与 Cookies

04Session 与 Cookies

在浏览网站的过程中,经常会遇到需要登录的情况

有些网页只有登录之后才可以访问,而且登录之后可以连续访问很多次网站

有时候过一段时间就需要重新登录

有些网站在打开浏览器时就自动登录了,而且很长时间都不会失效


静态网页和动态网页

我们首先了解一下静态网页和动态网页的概念

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>This is a Demo</title>
</head>
<body>
<div id="container">
<div class="wrapper">
<h2 class="title">Hello World</h2>
<p class="text">Hello, this is a paragraph.</p>
</div>
</div>
</body>
</html>
  • 这是最基本的HTML代码,我们将其保存为一个.html文件
  • 然后把它放在某台具有固定公网IP的主机上,主机上装上Apache或Nginx等服务器
  • 这样这台主机就可以作为服务器了,其他人便可以通过方法服务器看到这个页面,这就搭建了一个最简单的网站

  • 这种网页的内容是由HTML代码编写
  • 文字、图片等内容均通过写好的HTML代码来指定
  • 这种页面就叫作静态网页
  • 它的加载速度快,编写简单

但是存在很大的缺陷,如可维护性差,不能根据URL灵活多变地显示内容…

  • 例如,我们想给这个网页的URL传入一个name参数,让其在网页中显示出来,是无法做到的

因此,动态网页应运而生,它可以动态解析URL中参数的变化,关联数据库并动态呈现不同的页面内容,非常灵活多变

无状态HTTP

HTTP特点之一:无状态

  • 是指HTTP协议对事物处理是没有记忆能力的

    服务器不知道客户端是什么状态

  • 意味着如果后续需要处理前面的信息,则必须重传

  • 导致需要额外传递一些前面的重复请求,才能获取后续响应

这时两个用于保持HTTP连接状态的技术就出现了

Session

  • 在服务端,网站的服务器
  • 用来保存用户的Session信息

Cookies

  • 在客户端,浏览器端

  • 有了Cookies,浏览器在下次访问网页时会自动附带上它

    发送给服务器,服务器通过识别Cookies并鉴定是哪个用户

  • 再判断用户是否是登录状态,进而返回对应的响应

我们可以理解为Cookies里面保存了登录的凭证

有了它只需要在下次请求携带Cookies发送请求而不必重新输入用户名、密码等信息重新登录

在爬虫中,有时候处理需要登录才能访问的页面时

我们一般会直接将登录成功后获取的Cookies

放在请求头里面直接请求,不必重新模拟登录

Session(会话)

本身的含义是指有始有终的一系列动作/消息

  • 打电话时,从拿起电话号码到挂断电话这中间的一系列过程可以称为一个Session

在Web中,Session对象用来存储特定用户Session所需的属性及配置

  • 当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失

    而是在整个用户Session中一直存下去

  • 当用户请求来自应用程序的Web页时,如果该用户还没有Session

    Web服务器将会自动创建一个Session对象,当Session过期或被放弃后,服务器将终止该Session

Cookies

Cookies指某些网站为了辨别用户身份、进行Session跟踪而存储在用户本地终端上的数据

  • 当客户端第一次请求服务器时,服务器会返回一个响应头中带有Set-Cookie字段的响应给客户端,用来标记是哪一个用户

    客户端浏览器会把Cookies保存起来

  • 当浏览器下一次再请求该网站时,浏览器会把此Cookie放到请求头

    一起提交给服务器,Cookies携带了Session ID 信息

    服务器检查该Cookies即可找到对应的Session是什么

    然后再判断Session来以此辨认用户状态

  • 成功登录某个网站时,服务器会告诉客户端设置哪些Cookies信息

    在后续访问页面时客户端会把Cookies发送给服务器

    服务器再找到对应的Session加以判断

  • 如果Session中的某些设置登录状态的变量是有效的

    那就证明用户处于登录状态

    此时返回登录之后才可以查看的网页内容,浏览器再进行解析便可以看到了

  • 如果传给服务器的Cookies是无效的,或者Session已经过期了

    我们将不能继续访问页面,此时可能会收到错误的响应或者跳转到登录页面重新登录

image-20200517160845382

cookies属性结构

在浏览器开发者工具中打开Application选项卡,然后在左侧会有一个Storage部分,最后一项为Cookies

image-20200517171958673

  • Name,即该 Cookie 的名称。Cookie 一旦创建,名称便不可更改。
  • Value,即该 Cookie 的值。如果值为 Unicode 字符,需要为字符编码。如果值为二进制数据,则需要使用 BASE64 编码。
  • Max Age,即该 Cookie 失效的时间,单位秒,也常和 Expires 一起使用,通过它可以计算出其有效时间。Max Age 如果为正数,则该 Cookie 在 Max Age 秒之后失效。如果为负数,则关闭浏览器时 Cookie 即失效,浏览器也不会以任何形式保存该 Cookie。
  • Path,即该 Cookie 的使用路径。如果设置为 /path/,则只有路径为 /path/ 的页面可以访问该 Cookie。如果设置为 /,则本域名下的所有页面都可以访问该 Cookie。
  • Domain,即可以访问该 Cookie 的域名。例如如果设置为 .zhihu.com,则所有以 zhihu.com,结尾的域名都可以访问该 Cookie。
  • Size 字段,即此 Cookie 的大小。
  • Http 字段,即 Cookie 的 httponly 属性。若此属性为 true,则只有在 HTTP Headers 中会带有此 Cookie 的信息,而不能通过 document.cookie 来访问此 Cookie。
  • Secure,即该 Cookie 是否仅被使用安全协议传输。安全协议。安全协议有 HTTPS、SSL 等,在网络上传输数据之前先将数据加密。默认为 false。
会话Cookie 和持久Cookie
  • 会话Cookie就是把Cookie放在浏览器内存里

    浏览器在关闭之后该Cookie即失效

  • 持久Cookie则会保存到客户端的硬盘中,下次还可以继续使用

    用于长久保持用户登录状态

严格来说,没有会话 Cookie 和持久 Cookie 之 分,只是由 Cookie 的 Max Age 或 Expires 字段决定了过期的时间

一些持久化登录的网站其实就是把 Cookie 的有效时间和 Session 有效期设置得比较长

下次我们再访问页面时仍然携带之前的 Cookie,就可以直接保持登录状态。

常见误区

在谈论Session机制的时候,常常听到这样一种误解——“只要关闭浏览器,Session就消失了

可以想象下会员卡,除非顾客主动对店家提出销卡,否则店家绝对不会轻易删除顾客的资料。

对Session来说除非程序通知服务器删除一个Session,否则服务器会一直保留。

  • 比如程序一般都是在我们做注销操作时才去删除Session

    我们关闭浏览器时,浏览器不会主动在关闭之前通知服务器它将要关闭,所以服务器根本不会有机会知道浏览器已经关闭

之所以会有这种错觉,是因为大部分网站都使用会话Cookie来保存Session ID信息,而关闭浏览器后Cookies就消失了,再次连接服务器时,也就无法找到原来的Session了

如果服务器设置的Cookies保存到硬盘上,或者使用某种手段改写浏览器发出的HTTP请求头,把原来的Cookies发送给服务器,则再次打开浏览器,仍然能够找到原来的SessionID,依然还是可以保持登录状态的

恰恰是由于关闭浏览器不会导致Session被删除,这就需要服务器为Session设置一个实效时间,当距离客户端上一次使用Session的时间超过这个失效时间时,服务器就可以认为客户端已经停止了活动,才会把Session删除以节省存储空间

形象比喻

session是保存在服务器端

cookie是保存在客户端

每次访问的时候,相当于去串门,用户带着cookie去服务器家,当当当敲门

服务器:是谁啊?

用户:是我(cookie)啊

服务器:让我来确认一下(session确认)

服务器确认完毕后,放用户进门

cookies里带有Session ID信息,服务端根据它就能知道是哪个客户端了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值