Cookie是什么?
Cookie是保存在客户端的,是浏览器向服务端发送请求时,会携带Cookie信息,将Cookie发送至服务端。
一个浏览器访问多个不同的服务端,而请求每一个服务端时,可以携带多个Cookie
Cookie组成是由key 和 value组成的,key存放的是该Cookie的名字,而value是存放的是值
为什么要使用Cookie?
多个不同的浏览器访问客户端时,服务端是如何判断并准确返回给对方想要的数据呢?比如我们俩同时操作百度,那么你是搜索问题,而我在点击某个链接进行查看,那么此时服务器就会接收到两条请求,那么服务端是如何判断哪条是你的哪条是我的呢?
而Cookie的作用就是浏览器向客户端发送请求时,会携带一个或多个Cookie,而服务端就是通过Cookie来判断对方是谁,并给对方判断相对应的响应
Cookie的运行原理图:
Cookie的使用方法及细节
Cookie是先由客户端创建,创建后发送给浏览器并让浏览器进行保存,如果没有发送给浏览器,那么浏览器上就不会存在
Cookie的生命周期:
Cookie可以设置其存在时间,如果不设置,则默认为-1,也就是关闭当前会话,则浏览器会把Cookie销毁,也可以设置其时间,在该时间内Cookie会一直存在
Cookie的生命周期是:浏览器访问设置了cookie时间的servlet开始算起
Cookie的生命周期结束的特征:浏览器访问服务端时不再带有已结束的Cookie。但此刻的浏览器里该Cookie有可能还存在,那是因为浏览器会存在缓存
Cookie的有效路径:
因浏览器会存在很多的Cookie,而我们都知道访问服务端时,其服务端就是多个servlet,那么我们在访问不同的servlt,其访问路径是不同的,因servlt存放的位置也是不同的。
那么再碰到浏览器存在很多Cookie,而我们访问某一个servlet只想携带某个Cookie时,怎么处理?解决方法就是Cookie路径
Cookie的path属性,可以有效过滤哪些Cookie发送给服务端,哪些不发?怎么过滤呢?
假设我们现在有A、B两个Cookie,那么我给A设置路径是:http://localhost:8080/cs
B设置的是:http://localhost:8080/cs/aaa
那么当我请求http://localhost:8080/cs/xx1时:A会发送给浏览器,B不会发送
而我请求的是:http://localhost:8080/cs/aaa/xx1:A,B都会发送给客户端
简单来讲就是:有没有包含的关闭,向服务端发送的请求链接如果包含了A或者B的路径,就会发送
Cookie的使用细节:
1.一个Cookie只能标识一种信息
2.Cookie没有总数量,但是每个域名的Cookie数量和每个Cookie的大小是由限制的
Session
Session是什么?
1、session是服务端为每一个用户访问的浏览器创立的一个独立空间,可以理解为Session集合
2、每一个session都有一个独立的空间,也是一个session可以存放多条数据
3、假设A,B同时访问一个servlet,那么Tomcat就会给A和B分别创立一个Session,让A和B可以存放很多条数据
为什么要使用Session?
想象一下你现在逛淘宝,跳转到不同页面时,都会携带你的账号,比如你打开购物车,添加的商品就再里面,包括你搜索时,会有搜索记录,那么系统是怎么知道的呢?
因为数据存放在数据库可以通过数据库查找,但数据库存放的数据那么多,系统是如何判断出哪个数据是属于是你的呢?
用Cookie的解决问题,那Cookie只能放一些小的东西,且因Cookie是保存在浏览器,那么比如你登录某网站的账号和密码,比如在网吧,你想让下一个人也可以登录吗?
那么Session就可以解决这种问题,Session是存放在服务端。
session也可以解决购物车等问题
你可以理解为Tomcat内有一个类似HashMap的集合<K, V>,k存放的是浏览器Cookie中的JSessionID,而V则是httpSession,其中每一个session,又相当于一个集合,其中存放的是String类型,和Object。每一个Session是可以存放多个数据的
Session的运行逻辑:
1、当浏览器发出请求时,tomcat 会判断有没有携带 JSessionId,如果没有,则Tomcat会创建一个session,并分配一个JSessionId,并将其发送给浏览器让其保存
2、当浏览器发送请求并携带JSessonId时,Tomcat会先查找,有没有该JSessonId:
(1)如果已经存在了则进行操作
(2)如果没有则重新创建session,并分配JSessionId,将其发送给浏览器
Session使用细节及注意事项:
1、如果设置Session的生命周期时间到了,那么Tomcat会在自己维护的SessionMap中删除该JSessionId的信息,但浏览器会依旧保存,但下次如果浏览器访问该服务器时: 浏览器会带有之前的JSessionId,但Tomcat会在自己的SessionMap中查找该session,如果不存在则重新创建并返回新的session 2、一个浏览器多个页面访问同一个服务器时,不管有多少个页面,只会存在一个session 3、浏览器访问A servlet, A设置了60s的session生命周期, 只要是该浏览器访问该Tomcat下的所有servlet,那么session生命周期都会是60s。 原因是:session其是被tomcat维护在集合当中,那么一个浏览器又只会有一个session,那么其本质就是同一个只不过是很多人操作,A给对方操作添加的, B这边同样会显示出来。 保存机制:和java中类属性类似,也可以理解为:甲乙两个人共同拥有一个鱼池,只不过有a,b两个不同口,无论甲在进行放水或者注水,鱼池的水位都会发生变动,B也会感觉到 4、但如果是首先浏览器访问该B servlet,其没有设置生命周期,那么其session的生命周期就是默认的30分钟而不会是60s,除了又访问了设置生命周期的servlet 5、session生命周期是指:客户端访问服务器两次之间的间隔时间称之为session生命周期标签:浏览器,Session,访问,session,Cookie,Sessio,服务端 From: https://blog.csdn.net/Dwwer/article/details/141006089