Session 和 Cookie

由于 HTTP 协议是一个无状态协议,Web 应用程序无法区分请求是否来源于同一个浏览器,为了跟踪用户状态(如用户身份、登录状态等),需要 Session 与 Cookie 机制。

静态网页和动态网页

静态网页

存放在 Apache 或 Nginx 等服务器文件系统中的 HTML 文件实体。

  1. 由 htm、html、shtml、xml 等编写;
  2. 各静态网页的 URL 固定,且以.htm、.html、.shtml、.xml扩展名为后缀;
  3. 文字、图片等内容均通过既定的 HTML 代码指定;
  4. 内容相对稳定,易被搜索引擎检索收录;
  5. 交互性较差;
  6. 加载速度快、编写简单、可维护性差、不能接收 URL 中的参数来灵活显示内容。

动态网页

浏览器请求某个页面时,服务器可根据时间、传入的参数、数据库状态等信息,动态地生成 HTML 页面后响应给浏览器。浏览器显示的 HTML 一般并不实际存在于服务器中。

在动态网页中输入用户名和密码后可以得到一个凭证,根据这个凭证才能得到目标页面并保持登录状态。

  1. 由 asp、jsp、PHP、Perl、Python 等编写;
  2. 以数据库技术为基础,网站维护性好;
  3. 可实现比静态网页更丰富的功能,如用户注册与登录、在线查询、用户与订单管理等;
  4. 信息查询方便,能实现即时查询;
  5. 保密性与安全性要求高,制作成本高,不易被搜索引擎收录

伪静态

为了更美观地显示 URL,可映射 URL 地址使带参的动态网页 URL 被不带参的类静态 URL 替代显示。

无状态 HTTP

服务器接受请求、处理请求、发起响应的过程完全独立,是 HTTP 的无状态性。无状态 HTTP 指的是 HTTP 协议对事务的处理没有记忆能力,表现为服务器无法知悉客户端的状态。意味着随后的请求若基于先前的信息,则客户端必须重传,但这导致了请求的重复与资源的浪费。
为了解决这个问题,引入了 Session 和 Cookie 技术。对于同样的用户信息,服务端用 Session 保存,客户端用 Cookie 保存。下次访问同样的网页时,客户端将自动在请求中带上 Cookie 的内容。服务端接收到请求后,用 Session 与之比对,判定用户状态并返回对应的页面,实现了会话的维持。

在爬虫中,处理需要先登录才能访问的页面时,我们一般会直接将登录成功后获取的Cookie放在请求头里面直接请求,而不重新模拟登录。

Session

Session 即会话,原指一系列有始有终的动作或消息的集合。用户信息以 Session 的形式保存在服务端,当用户在同一网站不同页面间跳转时,会话过程由 Cookie 配合 Session 得以完整维持而不中断。通过了验证的用户第一次访问时,服务端将自动为用户创建一个 Session 对象,除非过期或弃用(如注销账户),服务端不会终止 Session,该用户后续的请求有 Session 参与。
Session 维持的细节如下:

  1. 客户端第一次完成验证后,服务端自动为用户创建一个 Session 对象;
  2. 服务器返回一个响应头中有用于用户标记的Set-Cookie字段的响应;
  3. 客户端将Set-Cookie字段的内容保存为 Cookie;
  4. 客户端再次请求相同网站时,会把 Cookie 加入请求头;
  5. 服务器检查 Cookie 内容的 Session ID 等信息并于 Session 校验:
    a. 校验通过则认为用户仍保持登录状态并返回登录后的内容;
    b. 校验失败则重定向到登录页面。

Cookie

Cookie,原意为曲奇饼干。Web 中指那些存储在用户本地终端上,用于用户身份鉴定、进行 Session 跟踪的数据——Session ID。下面以 知乎 为例学习 Cookie 的属性结构:

访问知乎并登录后,后打开开发者工具在 Application (应用) 选项卡的 Storage (存储) 中找到 Cookies 项,即可看到 Cookies 列表,每一项均为一个 Cookie。

在这里插入图片描述

  • Name (名称):Cookie 的名称。创建后不可更改;
  • Value (值):Cookie 的值。Unicode 字符需要使用字符编码,二进制数据需要使用 BASE64 编码;Domain (域名):可以访问该 Cookie 的域名。为.zhihu.com时,所有以zhihu.com结尾的域名均可访问该 Cookie;
  • Path (路径):Cookie 的使用路径。
  • Max-Age (最大有效时间):Cookie 的失效时间(秒)。常与Expires (失效)一起使用,计算出 Cookie 的有效时间。若 Max-Age 为正值,表示 Cookie 将在 Max-Age 秒后失效,Cookie 会被写入磁盘,称为持久 Cookie;若为负值,Cookie 仅存在于内存中,浏览器关闭后即刻失效,且不以任何形式保存该 Cookie,称为会话 Cookie;
  • Size (大小):Cookie 的大小;
  • HttpOnly (HTTP 字段):Cookie 是否仅能以 HTTP 访问。若为true,则只有在 HTTP Headers 中才会带有此 Cookie,而不能使用document.cookie访问;
  • Secure (安全性):Cookie 是否只允许使用加密的 HTTPS、SSL 等安全协议传输。默认为false。​若有收获,就点个赞吧
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试小白的晋级之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值