由于HTTP协议是无状态协议,它不对之前发送过的请求和响应的状态进行管理,即无法通过上一次请求的状态来对本次请求进行处理。
Cookie技术的引入
因为不用保存状态,所以可以减少服务器的CPU及内存消耗。保存这个特征的同时还要能解决Web应用的状态管理问题,于是引入了Cookie技术,Cookie技术通过在请求与相应报文中写入Cookie信息来控制客户端的状态。
Cookie会根据从服务器端发送的响应报文内的一个名为Set-Cookie
的首部字段内的信息,通知客户端保存Cookie。当下次客户端再次向服务器发送请求的时候,客户端会自动将Cookie信息加入请求报文中然后将请求发送出去。
- 初次访问(没有Cookie信息状态下的请求)
- 第2次访问(存有Cookie信息状态)的请求
服务端如果发现客户端发送过来的请求中带有Cookie
,会去检查是从哪个客户端发来的连接请求,并对比服务器上的记录,得到之前的状态信息,然后根据这个状态信息处理请求。
管理Session
Session代表着服务器和客户端一次会话的过程。直到session失效(服务端关闭),或者客户端关闭时结束。
Session会话由服务器保持以及管理,通过Session ID
来区别不同的用户。Session默认以cookie技术实现(详见基于表单的认证),客户端通过名为Set-Cookie的首部字段信息,通知客户端保存SessionID到Cookie中。
小结
Session和Cookie的目的相同,都是为了克服HTTP协议无状态的缺陷,但完成的方法不同:
- Session通过Cookie在客户端保存SessionID,而将用户的其他会话有关信息保存在服务端的Session对象中。
- 而Cookie则需要将所有的信息都保存在客户端,因此存在一定的安全隐患。
网友评论