无状态协议

在此前的HTTP中,曾谈到过HTTP是一种无状态的连接,这种协议对于事务处理没有记忆能力,对同一个url请求没有上下文关系,而且每次请求都是相对独立的,它不会受前面请求的影响而影响本次请求的结果,因为服务器并不会保存客户端的状态,那么客户端必须每次带上自己的状态去请求服务器,这样服务器才能认出你是谁。

举个简单的例子吧:

若为有状态的:

B:我叫kingbora,我需要存放我的背包。
S:好的。
B:我来取我的背包。
S:好的。
复制代码

若为无状态的:

B:我叫kingbora,我需要存放我的背包。
S:好的。
B:我来取我的背包。
S:你是谁?你的背包是哪个?。
复制代码

那么上面的例子上所需要的状态便是用户的身份,如果每次请求不带上这个身份,服务器无法识别用户身份,也就无法返回正确的信息。但是目前的HTTP都是有状态的,主要是因为引入了Cookie和Session机制,来实现HTTP请求的状态保持。

一、Cookie、Session

1.1 Cookie机制

理论上,一个用户所有的请求操作都应该属于同一个会话,每个会话之间相互独立互不影响。 HTTP协议是无状态的,一旦数据交互完毕,客户端和服务器之间的连接就会关闭,再次交换时需要重新建立新连接,也就意味着服务器无法从连接上跟踪会话。那么若想跟踪次会话,就需要引入Cookie这种会话机制。Cookie保存在客户端,具有不可跨域访问和操作的特性,而且还能设置有效期等等,

1.2 Session机制

Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单,但也相应增加了服务器的存储压力。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,也就是Session,下次访问时只需要从该Session中查找该客户的状态就好。

如果说Cookie机制是通过检查客户身上的"通行证"来确定客户身份的话,那么Session机制就是通过检查服务器上的"客户明细表"来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就行。

多个客户端执行程序时,服务器会保存多个客户端的Session。获取Session的时候也不需要声明获取谁的Session。Session机制决定了当前客户只会获取到自己的Session,而不会获取到别人的Session。各客户的Session也彼此独立,互不可见。Session一般存放在服务器短的内存中,而且Session可以通过特殊的方式做持久化管理。

转载于:https://juejin.im/post/5abc9a6a5188255c6163152f

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值