php urlencode js 无状态协议

php urlencode js 无状态协议

此文主题和脉络结构如下:

php urlencode js

和

HTTP 协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录; 和 的主要目的就是为了弥补 HTTP 的无状态特性。

是什么

客户端请求服务端,服务端会为这次请求开辟一块内存空间,这个对象便是 对象,存储结构为 。 弥补了 HTTP 无状态特性,服务器可以利用 存储客户端在同一个会话期间的一些操作记录。

如何判断是否是同一会话

服务器第一次接收到请求时,开辟了一块 空间(创建了对象),同时生成一个 ,并通过响应头的 Set-:= 命令,向客户端发送要求设置 的响应; 客户端收到响应后php urlencode js,在本机客户端设置了一个 = 的 信息php urlencode js,该 的过期时间为浏览器会话结束;

php urlencode js

接下来客户端每次向同一个网站发送请求时,请求头都会带上该 信息(包含 ), 然后,服务器通过读取请求头中的 信息,获取名称为 的值,得到此次请求的 。

的缺点

机制有个缺点,比如 A 服务器存储了 ,就是做了负载均衡后,假如一段时间内 A 的访问量激增,会转发到 B 进行访问,但是 B 服务器并没有存储 A 的 ,会导致 的失效。

是什么

php urlencode js

HTTP 协议中的 包括 Web 和浏览器 ,它是服务器发送到 Web 浏览器的一小块数据。服务器发送到浏览器的 ,浏览器会进行存储,并与下一个请求一起发送到服务器。通常,它用于判断两个请求是否来自于同一个浏览器,例如用户保持登录状态。

HTTP 机制是 HTTP 协议无状态的一种补充和改良

主要用于下面三个目的

登陆、购物车、游戏得分或者服务器应该记住的其他内容

用户偏好、主题或者其他设置

记录和分析用户行为

曾经用于一般的客户端存储。虽然这是合法的,因为它们是在客户端上存储数据的唯一方法,但如今建议使用现代存储 API。 随每个请求一起发送,因此它们可能会降低性能(尤其是对于移动数据连接而言)。

创建

当接收到客户端发出的 HTTP 请求时,服务器可以发送带有响应的 Set- 标头, 通常由浏览器存储,然后将 与 HTTP 标头一同向服务器发出请求。

Set- 和 标头

Set- HTTP 响应标头将 从服务器发送到用户代理。下面是一个发送 的例子

php urlencode js

此标头告诉客户端存储

现在,随着对服务器的每个新请求,浏览器将使用 头将所有以前存储的 发送回服务器。

php urlencode js

有两种类型的 ,一种是 ,一种是 ,如果 不包含到期日期,则将其视为会话 。会话 存储在内存中,永远不会写入磁盘,当浏览器关闭时,此后 将永久丢失。如果 包含有效期 ,则将其视为持久性 。在到期指定的日期, 将从磁盘中删除。

还有一种是 的 和 标记,下面依次来介绍一下

会话

上面的示例创建的是会话 ,会话 有个特征,客户端关闭时 会删除,因为它没有指定或 Max-Age 指令。

但是,Web 浏览器可能会使用会话还原,这会使大多数会话 保持永久状态php urlencode js,就像从未关闭过浏览器一样。

永久性

永久性 不会在客户端关闭时过期,而是在特定日期()或特定时间长度(Max-Age)外过期。例如

 Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;

的 和 标记

安全的 需要经过 HTTPS 协议通过加密的方式发送到服务器。即使是安全的,也不应该将敏感信息存储在 中,因为它们本质上是不安全的,并且此标志不能提供真正的保护。

的作用

的作用域

php urlencode js

和 Path 标识定义了 的作用域:即 应该发送给哪些 URL。

标识指定了哪些主机可以接受 。如果不指定,默认为当前主机(不包含子域名)。如果指定了,则一般包含子域名。

例如,如果设置 =,则 也包含在子域名中(如)。

例如,设置 Path=/docs,则以下地址都会匹配:

JSON Web Token 和 的对比

JSON Web Token ,简称 JWT,它和 都可以为网站提供用户的身份认证,但是它们不是一回事。

下面是 JWT 和 不同之处的研究

JWT 和 的相同之处

在探讨 JWT 和 之前,有必要需要先去理解一下它们的相同之处。

它们既可以对用户进行身份验证,也可以用来在用户单击进入不同页面时以及登陆网站或应用程序后进行身份验证。

如果没有这两者,那你可能需要在每个页面切换时都需要进行登录了。因为 HTTP 是一个无状态的协议。这也就意味着当你访问某个网页,然后单击同一站点上的另一个页面时,服务器的内存中将不会记住你之前的操作。

php urlencode js

因此,如果你登录并访问了你有权访问的另一个页面,由于 HTTP 不会记录你刚刚登录的信息,因此你将再次登录。

JWT 和 就是用来处理在不同页面之间切换,保存用户登录信息的机制。

也就是说,这两种技术都是用来保存你的登录状态,能够让你在浏览任意受密码保护的网站。通过在每次产生新的请求时对用户数据进行身份验证来解决此问题。

所以 JWT 和 的相同之处是什么?那就是它们能够支持你在发送不同请求之间,记录并验证你的登录状态的一种机制。

什么是

也称为会话 ,在 中,用户的登录状态会保存在服务器的内存中。当用户登录时, 就被服务端安全的创建。

在每次请求时,服务器都会从会话 中读取 ,如果服务端的数据和读取的 相同,那么服务器就会发送响应给浏览器,允许用户登录。

php urlencode js

什么是 Json Web

Json Web Token 的简称就是 JWT,通常可以称为 Json 令牌。它是RFC 7519 中定义的用于安全的将信息作为 Json 对象进行传输的一种形式。JWT 中存储的信息是经过数字签名的,因此可以被信任和理解。可以使用 HMAC 算法或使用 RSA/ECDSA 的公用/专用密钥对 JWT 进行签名。

使用 JWT 主要用来下面两点

JWT 的格式

下面,我们会探讨一下 JWT 的组成和格式是什么

JWT 主要由三部分组成,每个部分用 . 进行分割,各个部分分别是

因此php urlencode js 无状态协议,一个非常简单的 JWT 组成会是下面这样

php urlencode js

然后我们分别对不同的部分进行探讨。

是 JWT 的标头php urlencode js 无状态协议,它通常由两部分组成:令牌的类型(即 JWT)和使用的 签名算法,例如 HMAC 或 RSA。

例如

 {
   "alg": "HS256",
   "typ": "JWT"
 }

指定类型和签名算法后,Json 块被 编码形成 JWT 的第一部分。

Token 的第二部分是 , 中包含一个声明。声明是有关实体(通常是用户)和其他数据的声明。共有三种类型的声明:, 和 声明。

例如

 {
   "sub": "1234567890",
   "name": "John Doe",
   "admin": true
 }

然后 Json 块会被 编码形成 JWT 的第二部分。

JWT 的第三部分是一个签证信息,这个签证信息由三部分组成

比如我们需要 HMAC 算法进行签名

 HMACSHA256(
   base64UrlEncode(header) + "." +
   base64UrlEncode(payload),
   secret)

签名用于验证消息在此过程中没有更改,并且对于使用私钥进行签名的令牌,它还可以验证 JWT 的发送者的真实身份

拼凑在一起

现在我们把上面的三个由点分隔的 -URL 字符串部分组成在一起,这个字符串可以在 HTML 和 HTTP 环境中轻松传递这些字符串。

下面是一个完整的 JWT 示例,它对 和 进行编码,然后使用 进行签名

 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

php urlencode js

如果想自己测试编写的话,可以访问 JWT 官网

JWT 和 的不同

JWT 和 都提供安全的用户身份验证,但是它们有以下几点不同

密码签名

JWT 具有加密签名,而 则没有。

JSON 是无状态的

JWT 是无状态的,因为声明被存储在客户端,而不是服务端内存中。

身份验证可以在本地进行,而不是在请求必须通过服务器数据库或类似位置中进行。 这意味着可以对用户进行多次身份验证,而无需与站点或应用程序的数据库进行通信,也无需在此过程中消耗大量资源。

可扩展性

是存储在服务器内存中,这就意味着如果网站或者应用很大的情况下会耗费大量的资源。由于 JWT 是无状态的,在许多情况下,它们可以节省服务器资源。因此 JWT 要比 具有更强的可扩展性。

JWT 支持跨域认证

只能用在单个节点的域或者它的子域中有效。如果它们尝试通过第三个节点访问,就会被禁止。如果你希望自己的网站和其他站点建立安全连接时,这是一个问题。

使用 JWT 可以解决这个问题,使用 JWT 能够通过多个节点进行用户认证,也就是我们常说的跨域认证。

JWT 和 的选型

我们上面探讨了 JWT 和 的不同点,相信你也会对选型有了更深的认识,大致来说

对于只需要登录用户并访问存储在站点数据库中的一些信息的中小型网站来说, 通常就能满足。

如果你有企业级站点,应用程序或附近的站点,并且需要处理大量的请求,尤其是第三方或很多第三方(包括位于不同域的API),则 JWT 显然更适合。

后记

前两天面试的时候问到了这个题,所以写篇文章总结一下,还问到了一个面试题,禁用 ,如何使用 ?网上百度了一下,发现这是 PHP 的面试题……

php urlencode js

但还是选择了解了一下,如何禁用 后,使用

如果文章对你有帮助,求各位看官点点个三连!!!

公告:
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299

资源库 - 资源分享下载网 » php urlencode js 无状态协议

常见问题FAQ

关于资源售价和售后服务的说明?
本站所有资源的标价均为本站收集资源的辛苦费,不代表资源本身的价值。软件是高智慧高价值的商品,不可能是白菜价。本站资源标价只是赞助费用,收取的赞助费仅用来维持本站的日常运营!毕竟收集整理资料需要投入云计算资源和站长大量的精力。
代码有没有售后服务和技术支持?
由于代码的运行具有不可预见性,本站不保证代码完整可运行,不提供技术支持和售后服务。 本站原创代码都是站长自己开发的,可以有偿提供技术支持服务。 网站里标明【亲测】的代码都是站长亲测过的,其他的代码由于精力有限,没有一一测试,不能保证代码就一定能够使用,更没有技术支持服务,下载前请自行斟酌。
有没有搭建服务?
由于搭建服务比较费时费力,所以本站除了原创代码外均不提供搭建服务。本站分享代码纯属兴趣爱好,不以盈利为目的,请勿咨询有没有搭建服务,谢谢理解。
链接地址失效了怎么办?
请带上资源链接地址联系客服,工作时间内我们看到后将第一时间回复。
关于解压密码
本站资源一般都没有加密,如果发现需要解压密码的,那么就输入 hao.35dc.com 试试。

发表评论

资源库,由老程序员细心甄别、精心筛选,只为提供优质的源码资源

关于我们 联系我们