浏览器首先创建一个cookie对象,并将cookie对象在响应时候发给浏览器,同时可以携带一些数据。浏览器就会保存数据在本地并且会自觉的在响应头中带回数据。
Cookie相关的示例
首先生成Cookie对象,每组Cookie对象只能存一组数据,即一个key和value。 然后设置Cookie的生效的范围,以防资源的浪费。设置Cookie的生效时间会,会把Cookie存在硬盘里,至到生效时间结束。
获取Cookie
cookie能够弥补HTTP无状态的情况,使用的时也很简单,Cookie不可以存敏感的信息。Cookie每次访问的时候会对性能产生影响。
演示Session
第一次请求时,服务器会产生一个session,存了当前浏览器的相关数据,ID、密码等。响应的时候服务器自动的向浏览器发送了一份Cookie,数据是有Cookie携带,Cookie中携带了sesion的ID,浏览器就会在本地存Cookie对象在本地,因此浏览器中Cookie就有了session的id。当浏览器下次请求的时候Cookie中存的就是session的id。服务器得到session的id之后就可以找到与浏览器相对应的数据。总之,session就是依赖于cookie。
服务器端创建session不用手动创建,与cookie不一样。服务器或者Spring MVC会帮我们自动创建。session的创建和request,Model创建一样,只要声明就会注入。Cookie只能存字符串,因为需要来回传,需要大量的数据,影响性能,需要到客户端,客户端只能识别字符串。而session因为存在于服务器所以可以存任何类型的数据,也可以存很多。
session的get方法。
session逐渐用的越来越少,尤其是分布式下。
分布式下session用的越来越少的原因:
服务器往往是分布式部署,即多台部署,同时想浏览器提供部署。
为了负载均衡经常在浏览器和服务器之间加一个代理服务器nginx。浏览器访问的就是nginx,当访问的时候会负载均衡分发给每个服务器。
1、黏性session,假设浏览器的ip是101的话,分给服务器1去处理,即只要是同一个IP就分给同一个ip处理。这样的方式就很难保证服务器之间负载是均衡的。
2.同步session,当每一个服务创建session之后会把服务器同步给其他的服务器。这样服务器和服务器就会产生关联耦合,不是那么的独立。
3.共享session,单独搞一台服务器,用来存session,需要处理session的时候会统一放到单独的服务器中处理。其余的向单独的服务器获取。这台单独服务器挂了的时候其余服务器无法向单独服务器获取。
目前主流的是浏览器数据能存到Cookie就存到Cookie,敏感数据就存到数据库中。
我们可以不把会话的内容放到关系型数据库中,也可以放到redis中。
对于一些数据适合存到数据库就存到数据库,不适合的就存到redis中。