无状态的含义:指协议对于事务处理没有记忆能力,服务器不知道客户端的状态。

无状态会带来哪些问题?

无状态,意味着每个请求都是独立的。缺少状态信息意味着后续操作如果需要前面的信息,则需要把前面的信息重传一遍,这样导致每次连接传送的数据量增大。

缺点:每次请求会传输大量重复的内容。

Cookie和Session

Cookie和Session是两种用于保持HTTP连接状态的技术。

  • Cookie:把数据保存到了客户端
  • Session:把数据保存到了服务器

Cookie

思想:在客户端增加一个记录本,标识访问者信息

典型应用:

  • 判定注册用户是否已经登录网站(下一次进入此网站保留用户信息简化登录手续);
  • ‘购物车’之类处理(在不同页面选择不同商品,都会验证用户信息,需要cookie)

Cookie机制的执行原理:

  1. 服务端接收HTTP请求后,在响应数据包中携带Cookie信息(在响应数据包中添加Set-Cookie消息头);
  2. 客户端读取Set-Cookie这个响应头中的信息存储起来;
  3. 下次请求的时候,通过Cookie这个请求头,将Cookie的数据传输给服务端。

Session

思想:在服务器增加一个缓存区,把临时交流数据放在缓存区,一段时间后再整理归入数据库

Session通过服务器来保持连接状态。

当客户端访问服务器时,服务器根据需求设置Session,将会话信息保存在服务器上,同时将标识Session的SessionID传递给客户端浏览器,浏览器将这个SessionID保存在内存中,称为 无过期时间额Cookie 。浏览器关闭后,这个Cookie就会被清掉,它不会存在与用户的Cookie临时文件。

session机制的执行原理:
a. 客户端发送http请求,服务端把涉及到的数据存入session对象,并且分配一个唯一的JSESSIONID,以Cookie的形式返回给客户端:Set-Cookie: JSESSIONID=ABC986AB98C6A8A9B
b. 客户端接收并解析JSESSIONID,保存在客户端
c. 当发送后续请求时,把JSESSIONID带着一起发送出去(以Cookie的形式): Cookie: JSESSIONID=ABC986AB98C6A8A9B
d. 服务端接收JSESSIONID,根据JSESSIONID找到以前存储过的数据,完成HTTP的状态管理。