Cookie和Sessio

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生命周期

5、session生命周期是指:客户端访问服务器两次之间的间隔时间称之为session生命周期

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值