这位大侠,这是我的公众号:程序员江湖。 
分享程序员面试与技术的那些事。 干货满满,关注就送。 

session和cookie都是用来保持用户与后端服务器的交互状态。

cookie大小大小受限,并且占带宽。

session不能在多个服务器间共享。

 

cookie是保存在客户端的一个数据结构

session是保存在服务端的一个数据结构。

 

服务端:在tomcat中使用addcookie方法添加cookie,真正则是在response中完成创建。

接受客户端cookie:通过request.getcookies()来获得。

 

request和response 

Request 和 Response 对象起到了服务器与客户机之间的信息传递作用。Request 对象用于接收客户端浏览器提交的数据,而 Response 对象的功能则是将服务器端的数据发送到客户端浏览器。

 

session对cookie的改进:

cookie在每次访问时需要传回,增加传输量,可以设置id作为标志进行传递,即session id是通过cookie传递的,属性值为jsessionid。

 

有了seesionid,服务端可以创建httpsession对象。第一次触发通过request.getsession()。以后都通过session id来找到session。

 

session没过期时,即使容器关闭或重启也会被持久化。

同个浏览器打开同一个应用多次会使用同一个session,不同浏览器打开一个应用会用不同的session。

 

 

 

cookie问题:客户端存储限制、cookie管理混乱,cookie不能跨域名,安全问题。

可以用分布式session框架解决。

实现方式:

 

1统一使用订阅服务器管理cookie,应用服务器需要哪个cookie由订阅服务器来推送。一般用zookeeper实现

集群的配置管理。

 

 

2session将保存到分布式缓存中,让服务器可以共享访问,因为session不可能同步到每个服务器上。

 

分布式缓存可以用memcache实现。

 

3cookie太大的办法是压缩cookie,将keyvalue转化为文本。

 

4多终端session统一:手机和电脑的cookie和session需要统一,即包括数据结构,存储。防止二次登陆等问题。所以需要在服务端统一session,所有终端拿到的session id都一样。

 

5:热门。电脑打开网页扫码登录

服务端不停检测标识,手机登录后产生标识使pc端登录成功。