终于有人把cookie,token,session讲明白了。

1、HTTP的无状态协议

HTTP无状态协议是指该协议对事件的处理过程没有记忆能力,当后续的步骤需要上一步的信息时,则需要重传,即需要携带上一次的信息。

因此,对于存在依赖性的访问请求,则下一次的传递需要携带上一次传递的信息,依次不断的叠加,会导致传输的信息量会越来越大,服务器响应较慢。

HTTP无状态访问

在90年代,浏览器刚出现的时候,它的作用也仅仅是浏览一些文本而已,彼此之间不存在依赖关系(在后面的学习中,我们把这种依赖关系理解为会话)。因此,服务器不需要做任何的记录,浏览器请求什么,服务器就返回什么,彼此之间清清楚楚,不存在任何的爱恨情仇,双方的关系非常的融洽。

随着技术的发展,特别是当客户端与服务器进行动态交互的Web应用程序出现之后,HTTP的无状态特征严重影响了这类Web应用程序,Web应用的交互是双向,需要承前启后的,总不能每次都失忆。

就像夏洛特烦恼中,夏洛和大爷的对话:

夏洛:大爷,楼上322住的是马冬梅家吗?

大爷:马冬什么?

夏洛:马冬梅。

大爷:什么冬梅啊?

夏洛:马冬梅啊。

大爷:马什么梅啊?

夏洛:……行,大爷,您先凉快吧。

如简单的购物车程序也要知道用户到底在之前选择了什么商品,总不能所有用户都使用一个购物车吧,所以需要把每个用户都区分开,服务器需要记录每个用户的会话,又因为HTTP是无状态的,那么就要想办法为每个用户保持一个会话。

因此市面上出现了两种保持HTTP连接状态的技术:CookieSession

Cookie是客户端保持HTTP会话状态的技术,而Session是服务端保持HTTP会话状态的技术。通常情况下,这两种技术是结合使用的。

下面,我们将分别学习Cookie、Session,并针对它们的不足,学习Token的原理与使用。

2、Cookie

在学习Cookie之前,我们先考虑以下问题:

(1)什么是Cookie,Cookie的作用是什么?

(2)Cookie的工作机制是什么?

(3)Cookie的基本属性有哪些?

针对上面的问题,我们一一来做解答。

2.1 Cookie的原理及工作机制

按照官方的定义:

Cookie是保存在客户端浏览器中的文本文件(key-value形式),这个文件与访问的特定的Web页面(文档)关联在一起,并且保存在本地的客户端中,Cookie 最根本的用途是帮助 Web 站点保存有关访问者的信息。

举个例子,当客户端浏览器访问服务端时,服务端会记录每个用户的访问信息并以Cookie文件的形式保存在客户端,当用户再次访问服务端的特定页面时,服务端会首先检查客户端携带的Cookie中的用户身份信息,从而保持了会话的进行。

什么意思呢,我们举个生活中的例子:

当我们去银行办理储蓄业务时,柜员第一次给我们办了张银行卡,里面存放了身份证、密码、手机等个人信息。当我们下次再来这个银行时,银行机器能识别这种卡,从而能够直接办理业务。

那么问题来了,Cookie到底是如何起作用的呢?

事实上,当用户每次访问服务器时,Web应用程序都可以读取Cookie包含的信息,当用户再次访问该页面时,浏览器就会在本地硬盘上查找与该URL相关的Cookie,如果该 Cookie 存在(Cookie在不过期的情况下),浏览器就将它添加到request headerCookie字段中,与http请求一起发送到该站点。

我们以登录为例:

  • 实现登陆我们就必须需要cookie, 使用 cookie 来保存用户的信息。

  • 在请求某个域的时候,http 会自动将这个域的 Cookie 放到请求头当中。所以我们只需要在登陆用户成功后,将必要的信息通过设置 Set-Cookie 这个响应头返回给客户端。

  • 浏览器会自动将该头的信息存储到当前域名下的 Cookie 中,当下次用户请求的时候,http 协议会自动将该 cookie 带上。我们就可以在每次的请求的请求头当中拿到该 Cookie, 然后去判断用户是否登陆,进而根据用户是否登陆进行相

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值