由于http协议是无状态的,同一个浏览器对服务器的两次请求之间是没有关系的,服务器认为两次请求都是全新的请求,不会记住上次请求成功的数据。然而现有的业务常常需要服务器能记住用户的访问情况,
Cookie和Session都是为了解决http协议无状态而产生的。
客户端请求服务器,服务器会通过Response将Cookie发送到浏览器,并保存在浏览器端,下次浏览器再向服务器发送请求时,会把Cookie放到Request里发给服务器。
由于Cookie是将信息存储在客户端本地,而客户端本地存储并无任何安全机制,容易造成泄漏、窃取,所以一般Cookie存储的信息如用户基础姓名、年龄等,而不存储隐私性较强的信息,如密码、身份证等
Session机制与Cookie相似,不过是将数据保存在服务器上,能避免数据泄漏的问题。Session底层利用了Cookie来存储SessionId,下次浏览器请求服务器时,会将SessionId带上发给服务器,那么服务器就能将请求和Session对应起来。
多台服务器如何解决同一个用户唯一标识存储的问题,现大部分架构使用分布式,有可能用户A第一次请求被代理转发到Server1服务器上(在Server1完成登录),此时用户在此请求获取服务器资源被代理转发到Server2服务器上,那么传统的会话以服务器文件存储,则此时在Server2上并没有存储用户A的会话文件,所以用户A在第二次访问的时候仍然是未登录状态。
服务器代理转发是由Nginx算法配置,通常有Hash算法、随机访问、最小连接数、权重分配法等
Session和Cookie的原理,以及在分布式应用中出现的问题和解决方案
原文:https://www.cnblogs.com/will-xz/p/14392271.html