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端登录成功。
微信公众号
个人公众号:程序员黄小斜
微信公众号【程序员黄小斜】新生代青年聚集地,程序员成长充电站。作者黄小斜,职业是阿里程序员,身份是斜杠青年,希望和更多的程序员交朋友,一起进步和成长!专注于分享技术、面试、职场等成长干货,这一次,我们一起出发。
关注公众号后回复“2019”领取我这两年整理的学习资料,涵盖自学编程、求职面试、算法刷题、Java技术学习、计算机基础和考研等8000G资料合集。
技术公众号:Java技术江湖
微信公众号【Java技术江湖】一位阿里 Java 工程师的技术小站,专注于 Java 相关技术:SSM、SpringBoot、MySQL、分布式、中间件、集群、Linux、网络、多线程,偶尔讲点Docker、ELK,同时也分享技术干货和学习经验,致力于Java全栈开发!
关注公众号后回复“PDF”即可领取200+页的《Java工程师面试指南》强烈推荐,几乎涵盖所有Java工程师必知必会的知识点。