1、Cookie
Web应用程序是使用HTTP协议传输数据的,HTTP协议是无状态的协议,一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。要跟踪该会话,必须引入一种机制。Cookie机制弥补了HTTP无状态的不足。
Cookie实际上是一小段的文本信息,客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie,客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态,服务器还可以根据需要修改Cookie的内容。
Cookie的设置以及发送过程分为以下四步:
1)客户端发送一个http请求到服务器端;
2)服务器端发送一个http响应到客户端,其中包含Set-Cookie头部;
3)客户端发送一个http请求到服务器端,其中包含Cookie头部;
4)服务器端发送一个http响应到客户端。
2、Session
Session技术是服务端的解决方案,它是通过服务器来保持状态的。Session 对象存储特定用户会话所需的属性及配置信息,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。
如果多次登录的请求处理服务器不一致,怎么处理?
方案一,将用户锁定到特定的服务器上,但如果服务器挂掉Session就拿不到了。
方案二,Session广播给其他服务器,但会增大网络负荷。
方案三,Session信息共享在Redis。
3、Cookie和Session的区别和联系
1)session的实现是对cookie有依赖的,服务端执行session机制时候会生成session的id值,这个id值会发送给客户端,客户端每次请求都会把这个id值放到http请求的头部发送给服务端,而这个id值在客户端会保存下来,保存的容器就是cookie。
2)cookie数据存放在客户的浏览器上,session数据放在服务器上,因此session占用服务器资源,cookie不会。
3)cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗。
4)单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
参考资料:
https://www.cnblogs.com/andy-zhou/p/5360107.html#_caption_22